这里将自己学习java及其应用的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。
- if
- switch
- for
- while
- do-while
一、if
1.1 概述
if(
条件
) {
代码
}
if(
条件
) {
代码
1
} else {
代码
2
}
if(
条件
1) {
代码
1
} else if(
条件
2) {
代码
2
} else if(
条件
3) {
代码
3
} else {
代码
4
}
二、switch
2.1 概述
- switch只能判断:
byte,short,char,int
enum 枚举
jdk 1.7 String
- case
必须写字面值,或常量
- 一个case成立,从这个case,向后穿透所有case,包括default,直到结束,或者遇到 break中断、跳出switch
switch(
变量或表达式
) {
case 30:
case 10:
break;//
中断、跳出
case 50:
case 90:
default:
}
2.2 练习:手机选号
尾数8,50
尾数4,免费
其他,20
项目:手机选号
类:day0303.Test1
package day0303;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.println("输入手机号:");
String s = new Scanner(System.in).nextLine();
//调用f()方法,把s的值,传递到f()方法中,计算价格
f(s);
}//main结束
static void f(String tel) {
//tel的长度,必须是11
if(tel.length() != 11) {
System.out.println("号码格式错误");
return;//结束方法,返回到调用位置再继续执行
}
/*
* tel = "2313123123"
* 取最后一个字符
* char c = tel.charAt(10)
*/
//取第11个字符,它的下标位置是10
char c = tel.charAt(10);
//用来保存最终结果的变量 price
int price = 0;
//根据c字符的值,来为price重新赋值
switch(c) {
case '8': price=50; break;
case '4': price=0; break;
default: price=20;
}
//显示价格
System.out.println("价格:"+price);
}
}
三、for循环
3.1 概述
for(
变量赋值
;
执行条件
;
变量修改
) {
代码
}
例如:打印
1
到
10
for(int i=1; i<=10; i++) {
System.out.println(i);
}
3.2 练习
package day0304;
public class Test1 {
public static void main(String[] args) {
System.out.println("\n\n--1到10-----------");
f1();
System.out.println("\n\n--10到1-----------");
f2();
System.out.println("\n\n--2,4,6,8,10-----------");
f3();
System.out.println("\n\n--8,88,888,8888...888888888-----------");
f4();
System.out.println("\n\n--死循环1,2,3...-----------");
f5();
}
private static void f1() {
for(int i=1; i<=10; i++) {
System.out.println(i);
}
}
private static void f2() {
for(int i=10; i>=1; i--) {
System.out.println(i);
}
}
private static void f3() {
for(int i=2; i<=10; i += 2) {
System.out.println(i);
}
}
private static void f4() {
for(long i=8; i<=888888888; i=i*10+8) {
System.out.println(i);
}
}
private static void f5() {
for(int i=1; ;i++) {
System.out.println(i);
}
}
}
3.3 练习:鸡兔同笼
鸡兔共35只 共94只脚
鸡和兔各几只
穷举法
鸡 兔
0 35
1 34
2 33
3 32
...
23 12
...
35 0
项目:鸡兔同笼
类:day0305.Test1
package day0305;
public class Test1 {
public static void main(String[] args) {
//鸡j: 0到35
//兔t: 35到0
for(int j=0,t=35; j<=35; j++,t--) {
//脚的数量是94
if(j*2 + t*4 == 94) {
System.out.println("鸡:"+j+", 兔:"+t);
}
}
}
}
3.4 练习:阶乘
5!
5*4*3*2*1
0!
1
项目:阶乘
类:day0306.Test1
package day0306;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.print("输入整数,求阶乘:");
int n = new Scanner(System.in).nextInt();
//调用f()方法,把n的值传递到f()方法,求阶乘
f(n);
}
private static void f(int n) {
if(n<0) {
System.out.println("无");
return;//方法结束,返回到调用位置继续执行
}
if(n == 0) {
System.out.println("0的阶乘:1");
return;
}
/*
* r = 5
*
* i
* 4, r=r*i
* 3, r=r*i
* 2, r=r*i
* 1, r=r*i
*/
long r = n;
for(int i=n-1; i>=1; i--) {
r *= i;
}
System.out.println(n+"的阶乘:"+r);
}
}
四、循环嵌套
4.1 概述
for(int i=1; i<=3; i++) {
for(char j='a'; j<='c'; j++) {
i,j
}
}
i j
1 a
1 b
1 c
2 a
2 b
2 c
3 a
3 b
3 c
4.2 练习:循环嵌套
day0304_for循环
package day0304;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
System.out.println("\n\n--------------");
f1();
System.out.println("\n\n--------------");
System.out.print("输入行数:");
int n = new Scanner(System.in).nextInt();
f2(n); //打印n行的正方形
System.out.println("\n\n--------------");
f3(n);
}
private static void f3(int n) {
/*
* i
* 1 *
* 2 **
* 3 ***
* 4 ****
* n *****
* 1234i j
*/
for(int i=1; i<=n; i++) {
//j循环从第1个星号,到第i个星号
for(int j=1; j<=i; j++) {
System.out.print("*");
}
System.out.println();//补换行
}
}
private static void f2(int n) {
/*
* i
* 1 *****
* 2 *****
* 3 *****
* 4 *****
* n *****
* 1234n j
*/
//i循环,从第1行,到第n行
for(int i=1; i<=n; i++) {
//j循环,从第2个星号,到第n个星号
for(int j=1; j<=n; j++) {
System.out.print("*");
}
System.out.println(); //补一个换行符
}
}
private static void f1() {
for(int i=1; i<=3; i++) {
for(char j='a'; j<='c'; j++) {
System.out.println(i+", "+j);
}
}
}
}
4.3 练习:商品打折
商品打折
满500,9折 满1000,85折 满2000,8折 满5000,7折
项目:day0401_商品打折
类:day0401.Test1
package day0401;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.print("原价:");
double p = new Scanner(System.in).nextDouble();
//调用f()方法,求实际价格
f(p);
}
private static void f(double p) {
//用来保存实际价格的变量
double price = p;//默认是原价
//根据原价 p,来为 price 赋值
if(p>=5000) {
price = p*0.7;
} else if(p>=2000) {
price = p*0.8;
} else if(p>=1000) {
price = p*0.85;
} else if(p>=500) {
price = p*0.9;
}
System.out.println("实际价格:"+price);
} }
4.4 练习:100元买100只鸡
穷举法
穷举100元,可以买的所有组合
公鸡g 母鸡m 小鸡x 0 0 300
0 1 291
0 2 282
0 3 273
...
0 25 75
...
0 33 3 1 0 285
1 1 276
1 2 267
...
1 31 6 2 0 xxx
2 1 xxx
..
2 30 0
...
20 0 0
项目:百元买百鸡
类:Test1
package day0502;
public class Test1 {
public static void main(String[] args) {
/*
百元买百鸡
公鸡5元1只
母鸡3元1只
小鸡1元3只
*/
//g循环,公鸡数量从0到20
for(int g=0; g<=20; g++) {
//买g只公鸡剩余的前
int money = 100 -g*5;
//money最多能买多少母鸡
int max = money/3;
//m循环,母鸡数量从0到max
for(int m=0; m<=max; m++) {
//money买了m只母鸡后,剩的钱全部买小鸡
int x = (money -m*3) *3;
//g+m+x,是不是100只
if(g+m+x == 100) {
System.out.println(g+", "+m+", "+x);
}
}
}
}
}
4.5 练习:最大公约数、最小公倍数
项目:最大公约数最小公倍数
类:Test1
package day0501;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.println("输入两个整数:");
int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
int d = zdgys(a,b);
long x = zxgbs(a,b);
System.out.println("最大公约数:"+d);
System.out.println("最小公倍数:"+x);
}
private static int zdgys(int a, int b) {
int min = a<b ? a : b;
for(int i=min; i>=1; i--) {
//i能把a和b同时整除
if(a%i==0 && b%i==0) {
return i;
}
}
//这句代码根本不会执行,
//让编译可以通过
return 0;
}
private static long zxgbs(int a, int b) {
int max = a>b? a : b;
for(long i=max; ;i+=max) {
//i能同时被a和b整除
if(i%a==0 && i%b==0) {
return i;
}
}
}
}
五、break和continue
5.1 概述
- break
中断、跳出 switch 和 循环
- continue
继续进入循环下一轮执行
5.2 练习:break和continue
项目:break和continue
类:day0402.Test1
package day0402;
public class Test1 {
public static void main(String[] args) {
System.out.println("\n\n---------------");
f1();
System.out.println("\n\n---------------");
f2();
}
private static void f1() {
// 随机浮点数,[0,1)
//double d = Math.random();
//System.out.println(d);
// >0.999
//i变量用来计次
for(int i=1; ;i++) {
double d = Math.random();
if(d>0.999) {
System.out.println("第"+i+"次:"+d);
break;
}
}
//System.out.println("循环已经结束");
}
private static void f2() {
//打印1到100,跳过尾数3,5,7
for(int i=1;i<=100;i++) {
int y = i%10;
if(y==3 || y==5 || y==7) {
continue;
}
System.out.println(i);
}
}
}
六、循环命名
6.1 概述
- 内层循环中,控制外层循环 break 或 continue需要对外层循环命名
outer
:
for() {
for() {
break
outer
;
continue
outer
;
}
}
输入一个整数,判断是否是质数
2,3,5,7,11,13,17,19,23...
项目:求质数
类:day0403.Test1
package day0403;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.print("输入质数:");
int n = new Scanner(System.in).nextInt();
//调用f()方法,判断n的值是否是质数
f(n);
}
private static void f(int n) {
if(n<2) {
System.out.println(n+"不是质数");
return;
}
if(n == 2) {
System.out.println("2是质数");
return;
}
//在2到1+n开方范围,找能把n整除的值
//找到,n不是质数
//找不到,n是质数
double max = 1+ Math.sqrt(n);
for(int i=2; i<max; i++) {
//n能不能被i整除
if(n%i == 0) {
System.out.println(n+"不是质数");
return;
}
}
//判断了所有的值,没有能整除的
System.out.println(n+"是质数");
}
}
求n内质数的数量
Test2
package day0403;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
System.out.println(
"输入整数n,求n内质数的数量");
int n = new Scanner(System.in).nextInt();
f(n);
}
private static void f(int n) {
if(n<2) {
System.out.println("没有质数");
return;
}
if(n==2) {
System.out.println("有1个质数");
return;
}
//定义计数变量
int count = 1;//已知有一个质数
outer: //从3到n寻找质数
for(int i=3; i<=n ;i++) {
//判断i是否是质数
double max = 1+ Math.sqrt(i);
for(int j=2; j<max; j++) {//在2到<max,找能把i整除的数
if(i%j == 0) {//i被j整除,i不是质数
//跳到i++,继续判断下一个i值
continue outer;
}
}
//内层j循环结束,i是质数
count++;
}
System.out.println(n+"内质数的数量:"+count);
}
}
七、while与do-while
7.1 概述
- 先判断,再执行
while(执行条件) {
代码
}
- 先执行,再判断 至少执行一次
do {
代码
} while(执行条件);
7.2 练习:while循环
项目:while循环
类:day0404.Test1
package day0404;
public class Test1 {
public static void main(String[] args) {
System.out.println("\n\n----------------");
f1();
System.out.println("\n\n----------------");
f2();
}
// >0.999
private static void f1() {
int i = 0;//用来计次
double d = 0;//用来保存结果
//当d不是需要的值,继续产生新的值
while(d<=0.999) {
d = Math.random();
i++;
}
System.out.println("第"+i+"次:"+d);
}
private static void f2() {
int i = 0;
double d = 0;
do {
d = Math.random();
i++;
} while (d<=0.999);
System.out.println("第"+i+"次:"+d);
}
}
八、for和while
8.1 概述
- for和while都可以互相代替
- 固定的循环次数、数据规律变化,用for
已经产生了一个[1, 1001)范围的随机整数
请猜这个数是几
285
猜:1 小
猜:999
大
猜:2 小
猜:285
对
项目:猜数字
类:day0405.Test1
package day0405;
import java.util.Random;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
//产生随机整数
// 1+ [0, 1000) --> [1, 1001)
// 1+ {0,1,2,3,4,5...999}
int r = 1+ new Random().nextInt(1000);
System.out.println(r);
System.out.println(
"已经产生了一个[1, 1001)范围的随机整数");
System.out.println("请猜这个数是几");
while(true) {
System.out.print("猜:");
int c = new Scanner(System.in).nextInt();
if(c > r) {
System.out.println("大");
} else if(c < r) {
System.out.println("小");
} else {
System.out.println("对");
break;
}
}
}
}