一、流程控制
在进行后面复习之前,要永远记住一句话,在没有任何控制程序的加持下,程序的运行时自上而的顺序依次运行,没有例外!
1、赋值语句
字面意思:在一个表达式中当一个值赋给某个变量后,这个表达式就成一个赋值语句.
值得注意的是 java 中不单单只有进行数值运算才可进行赋值, 其实创建的对象的过程也是可以看成赋值的过程.
最容易混淆的点是:java 的赋值运算符是 = ;但是它不等同数学中的等号,在java中(其他语言) = 属于赋值运算符 , 而 java 中的 == 才可以近似看成数学中的等号,在java中 == 长用作 判断两个操作数是否相等,不单单是等于;
2、分支语句
①if...else...
语法格式:
if(条件表达式){
语句1;
}else{
语句2;
}
当然 if...else... 不仅仅只是这样固定的方式,它随着程序员的需求有不同的表现形式:
1 1 public classTest06 {2 2
3 3 public static voidmain(String[] args) {4 4
5 5 int x = 3;6 6 int y = 4;7 7
8 8 //第一种表现形式
9 9 if (x ==y) {10 10 System.out.println("true");11 11 }else{12 12 System.out.println("false");13 13}14 14 //output result: false;
15 15
16 16 //第二种表现形式
17 17 if (x !=y) {18 18 System.out.println("true");19 19}20 20 //output result: true;
21 21
22 22 //第三种表现形式
23 23 if(x ==y) {24 24 System.out.println("true");25 25}26 26 else if(x
32 32 //第三中表现形式可以不断的增加 else if
33 33 //从输出结果可以看出,当分支程序的条件表达式的 result 一
34 34 //直是 false 则不断的往下继续判断剩余的分支程序else 终止
35 35 //当一个分支程序一段分支的条件表达式的 result 是true,则输
36 36 //出该分支程序的值,剩余的分支段不执行
37 37}38 38 }
View Code
if...else...还有一个重点与难点:关于 if 语句的嵌套:
1 public classTest06 {2
3 public static voidmain(String[] args) {4
5 int x = 3;6 int y = 4;7
8 if (x !=y) {9 if (x
18
19 if (x !=y) {20 if (x >y) {21 System.out.println("完全正确");22 }else{23 System.out.println("部分正确");24 }25 }else{26 System.out.println("完全错误");27 }28 //output result: 部分正确
29
30 if (x ==y) {31 if (x >y) {32 System.out.println("完全正确");33 }else{34 System.out.println("部分正确");35 }36 }else{37 System.out.println("完全错误");38 }39 //output result: 完全错误
40 }41 }
View Code
②switch语句
switch(表达式){
case c1:
语句组1;
break;
case c2:
语句组2;
break;
default
语句组;
break;
}
注意: switch 中的表达式的计算结果必须是 int 型或 char 型(short 与 byte 的使用要提升). 禁止使用浮点型与 long 型,并且 switch 中的表达式是与 case 中的 c1... 进行关系运算
1 1 import java.util.*;2 2
3 3 public classTest07 {4 4
5 5 public static voidmain(String[] args) {6 6
7 7 for(int i = 0; i < 10;++i) {8 8 Scanner s = new Scanner(System.in);9 9 int x =s.nextInt();10 10
11 11 //switch (x ==y) {//这样的表达式是错误的:因为这个表达式不是条件表达式,这个表达式是与下面的任何 case 进行关系运算
12 12 switch(x) {13 13 case 1:14 14 System.out.println("今天是星期一");15 15 break;16 16
17 17 case 2:18 18 System.out.println("今天是星期二");19 19 break;20 20
21 21 case 3:22 22 System.out.println("今天是星期三");23 23 break;24 24
25 25 default:26 26 System.out.println("都没有");27 27 break;28 28}29 29}30 30}31 31 }
View Code
这个程序中有两个没有见到过的关键字: break 和 default:
1、 default: 表示在 switch 语句中 任何一个 case 都没有与之相对应的结果,则进入 default 执行语句组,其实与 if 语句的 else 的本质相同;
这里产生了一个疑问, default 放置在 switch 语句中任何位置对整个程序有什么影响?
default 放置在任何的位置(switch 的首位置),判断其对switch语句的影响取决于 break 与 switch - case 之间的判断结果:
① 如果没有 break 且 witch - case 之间的判断结果为假 -------------> 输出 default 的语句组且往下继续执行输出与 default 最近的 case 语句组
② 如果有 break 且 witch - case 之间的判断结果为假 ----------------> 输出 default 的语句组
③ 如果有break 且 witch - case 之间的判断结果为真 -----------------> 不输出 default 的语句组,而是输出真值
④ 如果没有break 且 witch - case 之间的判断结果为真 --------------> 不输出 default 的语句组,而是输出真值
2、break :(1).结束当前整个循环,执行当前循环下边的语句.忽略循环体中任何其它语句和循环条件测试.
(2).只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出。[逐层判断,逐步跳出]
1 public classTest08 {2
3 public static voidmain(String[] args) {4
5 int k = 0;6 int sum = 0;7
8 for (int a = 0 ; a < 20; a++) {9 k +=a;10 for(int b = 1; b < 5; b ++) {11 sum +=b;12 break; //此处的break 结束 for(b) 的循环,并直接往下执行
13}14 //break;
15 System.out.println(sum); //上一行的 break 执行 已经结束了 整一个 for(a) 循环,所有在其后面再加入语句则会编译错误
16 break; //此处的break 结束 for(a) 的循环,并直接往下执行
17}18System.out.println(k);19System.out.println(sum);20}21}22 //output result: 1 0 1
View Code
(3).break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。
1 packageReview;2
3 public classTest08 {4
5 public static voidmain(String[] args) {6 int sum = 0;7 for (int a = 0 ; a < 20; a++) {8
9 sum +=a;10 break;11 }12 System.out.println(sum);13 }14 }
View Code
(4).当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。 总的来说:就近原则,结束当前的整个判断。
1 import java.util.*;2
3 public classTest07 {4
5 public static voidmain(String[] args) {6
7 for(int i = 0; i < 10;++i) {8 Scanner s = newScanner(System.in);9 int x =s.nextInt();10
11 switch(x) {12 case 1:13 System.out.println("今天是星期一");14
15 case 2:16 System.out.println("今天是星期二");17 break;18
19 case 3:20 System.out.println("今天是星期三");21 break;22
23 default:24 System.out.println("都没有");25 }26 }27 }28 }29
30 /*output result:31 132 今天是星期一33 今天是星期二34 */
View Code
switch 的综合性程序:
1 import java.util.*;2
3 public classTest09 {4
5 public static voidmain(String[] args) {6
7
8 //输入一个成绩 判断它成绩再哪个阶段
9 for(int i = 0; i < 100; i++) {10 Scanner s = newScanner(System.in);11 int grade =s.nextInt();12
13 if (grade <= 100 && grade >= 0) {14
15 int x1 = grade / 10;16
17 switch(x1) {18
19 case 9: case 10:20 System.out.println("优秀!");21 break;22 case 8:23 System.out.println("优良");24 break;25 case 7:26 System.out.println("良");27 break;28 case 6:29 System.out.println("及格");30 break;31 default:32 System.out.println("拖出去宰了");33 break;34 }35 }else{36 System.out.println("输入错误");37 }38 }39 }40 }
View Code
3、循环语句
for 语句
语句的表达式:
for(初始语句; 条件表达式;迭代语句){
循环体语句;
}
关于 for 循环与 if 语句的嵌套使用代码程序:
1 /**
2 * 银行账户取钱程序(输入账户最多三个,输入密码最多三次,取钱取到没钱为止)3 **/
4 import java.util.*;5
6 import java.math.*;7
8 public classTest10 {9
10 public static voidmain(String[] args) {11
12 String cs = "no";13 String k = "yes";14
15 int y = 80000;16
17 String account = "cheng"; //账号
18 String password = "1"; //密码
19
20 System.out.print("请输入你的账户:");21 Scanner s = newScanner(System.in);22 String str = s.next(); //
23
24 //循环账户重复输入
25 for(int i =0; i < 3; ++i) {26
27 //判断账户输入是否正确
28 if (str.equals(account) == true) {29
30 System.out.print("请输入你的密码:" + " ");31 Scanner sc = newScanner(System.in);32 String stri =sc.next();33
34 //循环密码重复输入
35 for ( int j = 0; j < 3; j++) {36
37 //判断密码输入是否正确
38 if (stri.equals(password) == true) {39
40 System.out.println("你的账户余额有:" +y);41 System.out.print("请输入你要取出的金额:");42
43 Scanner sca = newScanner(System.in);44 int amount =sca.nextInt();45
46 int p = y / 100;47 int balance = y -amount;48
49 System.out.println("你的账户余额有" +balance);50
51 //判断账户余额是否为0
52 if (balance <= 0) {53 System.out.println("你的银行卡没有money,你个穷屌丝");54 System.out.println("银行卡已退出,请取走你的银行卡");55 break;56 }57
58 //循环取钱次数
59 for(int g = 0; g < p - 1; ++g) {60
61 System.out.print("你是否还需再取出金额: ");62 Scanner scan = newScanner(System.in);63 String strin=scan.next();64
65 //判断是否要继续取钱
66 if(strin.equals(k)) {67
68 System.out.print("请再次输入你要取出的金额:");69 amount =sca.nextInt();70 balance = balance -amount;71
72 //判断账户金额是否为0
73 if (balance <= 0) {74 System.out.println("你的银行卡没有money,你个穷屌丝");75 System.out.println("银行卡已退出,请取走你的银行卡");76 break;77 }else{78 System.out.println("你的账户余额有" +balance);79 }80 }else if(strin.equals(cs)) {81 System.out.println("银行卡已退出,请取走你的银行卡");82 }else{83 System.out.println("小鬼, 你连 yes 和 no 都打不清 还想继续取钱 没门");84 break;85 }86 break;87 }88
89 break;90 }else if (j < 2) {91 System.out.print("请再次输入你的密码:");92 stri =sc.next();93
94 }else{95 System.out.println("密码输入次数太多,请取回卡!");96 break;97 }98 }99 break;100 }else if ( i < 2) {101 System.out.print("请再次输入你的账户:");102 str =s.next();103
104 }else{105 System.out.println("账户输入超时,请取回卡!");106 break;107 }108 }109 }110 }
View Code
while 语句
语句表达式:
while(条件表达式){
循环体语句;
}
while 与 for 都是相同的循环体结构,并且两者都可以相互的转换使用,但是两者还是有些许区别:
从结构上可以可以看出,for 中有更多的语句,使得 for 循环的可读性更高;
从应用上来看,for 多用于循环次数明确的场景,while 多用于循环次数不够明确的场景,并且 while 的条件表达式,只要它的判定是 true 他就会一直无限的执行下去;而 for 循环都是条件表达式明确的
1 public classTest12 {2
3 public static voidmain(String[] args) {4
5 int sum01 = 0;6 int sum02 = 0;7 //for 循环
8 for(int i = 0; i<10; i++){9 sum01 +=i;10 System.out.print(sum01 + " ");11 }12 //System.out.println(sum01);
13 System.out.println();14 System.out.println("-------------------");15
16 int j = 0;17 while (true){18 sum02 +=j;19 ++j;20 System.out.print(sum02 + " ");21 }22 //System.out.println(sum02);
23 }24 }
View Code
do...while...
语法表达式:
do{
语句;
}while(条件表达式);
从这个 do...while... 的语法格式,与程序顺序执行 可以看出 do...while... 的执行顺序是先执行语句然后进行判断,为真 返回上级继续执行,为假结束执行,也就是说无论 while 的判断是否真假, do...while...
都会先执行出语句内容;
1 public classTest13 {2
3 public static voidmain(String[] args) {4
5 int i = 1;6 int sum = 0;7 do{8 sum +=i;9 i++;10 }while(i < 10);11
12 System.out.println(sum);13
14 int j = 1;15 int sum01 = 0;16 do{17 sum01 +=j;18 j++;19 }while(j < -1); //该循环体先执行语句,在执行 while 的条件表达式
20 System.out.println(sum01);21 }22 }
View Code
break 与 continue 的用法 与 区别
break的用法:
1、在 switch 与 循环体中 break 的作用是跳过本语句块中余下的所有语句,转到块尾,执行其后的语句;
1 public classTest14 {2
3 public static voidmain(String[] args) {4
5 for(int i = 0; i < 10; i++){6 System.out.print("你好!" + " ");7 break;8 }9
10 System.out.println("大家好!");11 //output result: 你好! 大家好!12 //该程序添加 break 与不添加的区别;不添加 break 则 for 循环会一直执行到条件表达式为假为止,则输出结果将会为:13 //你好!(10 次输出) 大家好!14 //而添加 break 后,程序顺序执行到 break 后直接跳出 for 循环执行后面的语句;输出结果为:15 //你好!(1 次输出)大家好!
16
17 System.out.println();18
19 /*for(int i = 0; i < 10; i++) {20 break;21 System.out.print("你好!" + " "); // Unreachable statement : 不能达到的声明22 }23 System.out.println("大家好!");*/
24 //如果 break 放在 for 循环的执行语句前呢?25 //很明显程序直接在编译阶段出现了 error: 无法访问 18 行的执行代码;所以这种代码方式是错误的,不能这样书写;
26
27 for(int i = 0; i < 10; i++) break;{28 System.out.print("你好!" + " ");29 }30 System.out.println("大家好!");31 //再看看这方式;这个程序的执行顺序是什么样的32 //当执行 for 括号中的语句完后,本应该执行大括号中语句块,但在这之前先遇见了 break 语句,按照 break 的特性直接33 //跳过本循环的其余语句,执行后面的语句,奇妙的事情发生了,因为有了 break 语句造成了之前 for 循环留下的语句块,34 //使得该语句块的程序与 for 循环分隔成为独立的程序,所以 break 执行后 37 行的语句成为独立的语句单独顺序执行35 //output result: 你好! 大家好!
36 }37 }
View Code
2、在块中和标号配合使用,其语法格式是: break 标号;
1 public classTest15 {2 public static voidmain(String[] args) {3
4 int x = 20;5 out:for( int i = 2; i < 10; i++){ //out: ---> 标记
6 System.out.println("begin i = " +" "+i);7
8 while(x < 1000){9 System.out.println("i = " + i +" " +", x = " +x);10 if (x * i >= 80) {11 breakout;12 /**break 与 break out 的区别:13 * 先谈谈 break out 的用法: 首先有一个 out:的标记,该标记用于当出现 break out 语句执行时,跳到该标记的位置,14 * 以这个位置为出发点,跳过这个出发点所包含的整个语句块,随后执行下一个语句块,从这个程序可以看出,out: 标记在了15 * for 循环上,也就是说当程序执行到 break out 后直接跳过这个 for 循环本身,直接执行 for 循环以外的程序*/
16 }else{17 x += 5;18 }19 }20 }21 System.out.println("after out look");22 }23 }24
25 /**所以 break 与 break out 的区别就一目了然了:break 跳过本块余下语句,转到块尾,执行块后的语句,而 break out 是跳到所标记的位置,然后跳过26 * out:所标记的整个循环语句块,执行其余的语句块,27 *28 * break out 自然就拥有了 break 所没有的选择性29 **/
View Code
continue的用法:
1、是结束此次循环执行下一次循环;
2、在块中和标号配合使用,其语法格式是:continue 标号;
1 public classTest16 {2 public static voidmain(String[] args) {3
4 out: for(int i = 0; i < 10; i++){5
6 for (int j = 0; j < 20; j++) {7
8 if (j >i){9 System.out.println();10 //break;//当 if 判断正确输出 11 行 ,执行到此处时跳过本程序的剩余语句,也就是跳过从12行开始到23行的所有执行11 //程序,直接执行 24 行 System.out.print("* ");12 //为什么 for 中 嵌套 if 语句时 if 中的 break 语句是对 for 进行跳转?13 //if 本身也是一个分支跳转语句,所以 if 与 break 连用时不考虑 break 是否只对 if 进行跳转14 //它们两个作为一个整体在 for 中 ,所以 break 结束的是 for 余下的循环执行程序
15 continueout;16 }17 //break;//跳过 8 行 for 循环,直接执行 24 行 System.out.print("* ");
18 System.out.print("* ");19 /**continue 的用法是结束当此循环执行下一次循环,当然 也可以与标号连用,语法上: continue out 其用法:20 * 结束当次循环执行 out: 所标记的程序起点。21 **/
22 }//System.out.print("* ");
23
24 }25 }26 }27 /**output result:28 * *29 * * *30 * * * *31 * * * * *32 * * * * * *33 * * * * * * *34 * * * * * * * *35 * * * * * * * * *36 * * * * * * * * * **/
View Code