流程控制
多分支结构
if else多分支结构:
书写方式:
if(表达式1){
执行语句1;
}else if(表达式2){
执行语句2;
}else if(表达式3){
执行语句3;
}else if(表达式4){
执行语句4;
...
}else if(表达式n){
执行语句n;
}else {执行语句n+1}
执行顺序:
1.程序自上而下运行,到了第一个if的时候,判断表达式1的结果,如果为true,则执行对应的执行语句1,如果为false,程序跳过执行语句1并继续向下运行;
2.程序自上而下运行,到了第二个if的时候,判断表达式2的结果,如果为true,则执行对应的执行语句2,如果为false,程序跳过执行语句1并继续向下运行;
3.同上
4.最后,如果所有的if条件都不符合,那么结果就是最后的执行语句else里的执行语句。
注意事项:
-
if else语句中的表达式的值都是布尔类型的值。
-
在整个判断语句中尽可能要将所有的情况罗列出来
-
最后的else中的执行语句可以不写,但最好加上,可以保证程序的健壮性
-
其中的执行语句只有一行的时候,可以不写大括号,但最好还是写上,否则比较难懂。
测试用例:
public class Test{
public static void main(String[] args){
int num = (int)(Math.random()*100+1);
System.out.println("生成的分数是:"+num);
if (num == 100){
System.out.println("大神");
}else if(num>=90&&num<100){
System.out.println("王者");
}else if(num>=80&&num<90){
System.out.println("强者");
}else if(num>=70&&num<80){
System.out.println("高手");
}else if(num>=60&&num<70){
System.out.println("及格");
}else {
System.out.println("菜鸟");
}
}
}
switch分支结构
书写规则:
switch(表达式){
case值1:执行语句1;break;
case值2:执行语句2;break;
case值3:执行语句3;break;
...
case值n:执行语句n;break;
default:执行语句;break;
}
运行方式:
程序自上而下运行,碰到了switch,然后判断switch内表达式的值,如果碰到了相匹配的值,就输出对应的执行语句,然后继续执行,如果碰到break,那么结束整个switch表达式的运行并继续执行switch后面的代码;如果运行过程中没有匹配到对应的case值,那么程序会执行最后的执行语句default。
测试用例:
/*
随机生成1-12月份数字,根据该数字判断其季度。
*/
public class Demo06{
public static void main(String[] args){
int num = (int)(Math.random()*12+1);
switch (num){
case 3: case 4: case 5:
System.out.println("春天");
break;
case 6: case 7: case 8:
System.out.println("夏天");
break;
case 9: case 10: case 11:
System.out.println("秋天");
break;
case 12: case 1: case 2:
System.out.println("冬天");
break;
}
}
}
案例分析:
程序自上而下运行,生成对应cases范围内的数字,并执行对应的输出语句;
例如:系统随机生成数字7;
在整个switch中匹配到了case7,然后继续运行,穿透了case8,并执行了夏天的输出语句;
语句执行结束,程序继续运行,碰到了break,整个switch语句结束。
注意事项:
- switch程序中的语句中break的作用是为了防止case在程序运行期间穿透
- default语句为了保证了程序的健壮性,可以将剩余的无法罗列的情况也加以输出反馈
- default语句是可以放在整个switch语句中的(大括号内)任意位置的,但是一般将它放到switch的最后
- switch的表达式的值一般是整型结果,其他的类型除了boolean类型之外可以通过强制类型转化来书写,在后续的新版本中新增加了对枚举,以及字符串类型的支持。
循环结构
在程序中执行重复的(或者规律性强的)连续型代码,可以使用循环来执行语句
while 循环
书写格式:
while(循环表达式){
循环体;
}
比如:
int num1 = 1;
int num2 = 1;
while (num1<100){
num1+=num2;
}
System.out.println(num2);
执行顺序:
while程序自上而下运行,判断小括号内的条件是否为true;如果为true,那么执行对应的循环体一次,直到小括号内的条件判断为false,循环停止,并执行后续的代码。
注意事项:
- 循环表达式的值是一个布尔类型的值
- while不能确定循环次数,但是可以知道什么时候可以结束循环。
- 如果表达式里的值恒为true,那么该while循环是个死循环,在现阶段的学习中要尽量避免碰到死循环。(意思就是说以后有用嘞)
do while循环
do{
循环体;
}while(循环表达式)
代码示例
int num = 0;
int a = 30;
do{
num+=2;
a--;
}while(a!=0)
System.out.println(num);
执行顺序:
1.先执行循环语句一次
2.然后判断语句的布尔值,为true就继续循环,为false就结束循环并执行后续的语句。
注意事项
- 使用规则大体上和while循环相同,不同的是do-while循环一定是需要执行一次循环体的。
for循环
书写格式:
for(声明循环变量;循环变量的表达式;改变循环变量的表达式){
循环体;
}
示例:
int sum = 0;
for(int a = 0;a<=5;a++){
sum+=a;
}
System.out.println(sum);
执行顺序:
- 程序运行时先判断表达式中的a的值是否符合判断条件;
- 如果符合条件,就将a的值计入sum变量中;
- 将变量a的值自增1,并再次判断a的值是否符合条件
- 重复第二第三条,直到判断语句中a的值不满足条件时,就结束循环体并执行后续的代码。
注意事项:
- 对于for循环内的变量而言,外部是无法访问的
- 对于第一个循环变量而言,声明的类型可以是基本数据类型和引用数据类型
- 三个循环的区别
- for循环可以确定循环条件
- while循环可以知道什么时候结束循环
- do-while循环必须先执行循环体一次