3. 流程控制
三个基本流程控制结构:顺序结构,分支结构,循环结构
3.1 顺序结构
顺序结构就是程序从上到下逐行地执行,中间没有任何判断和跳转。
3.2 分支结构
分支结构就是根据条件,选择性地执行某段代码。有if...else和switch-case两种分支语句
if-else结构可以相互嵌套
if(boolean表达式){ java语句; }else if(boolean表达式){ java语句; }else { java语句; }
分支语句中,如果只有一条Java语句,大括号可以省略。但不推荐使用
所有的switch-case都可以转换为if-else,但反之不成立。(其中一个理由是特点第2点)
特点:
格式为:
switch(变量){ case 常量1:语句1;break; case 常量2:语句2;break; … … case 常量N:语句N;break; default:语句;break; }
switch(表达式)中表达式的返回值必须是下述几种类型之一:byte,short,char,int(整数,字符),枚举(JDK5.0新增),String(JDK7.0新增);
case子句中的值必须是常量,且所有case子句中的值应是不同的;
当成功匹配case中的常量时,会进入相应case结构中,调用其执行语句。当调用完执行语句以后,仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾为止。
default是可以省略的,并且其位置也是灵活的,但是通常将其放在case语句之后,当没有匹配的case时,执行default(相当于if-else中的else);
不同case如果执行语句相同,可以合并,只需要写一次该相同的执行语句(本质是第4点)
当既可以使用if-else,又可以使用switch-case时,同时switch取值又不太多,推荐使用switch-case。因为switch-case执行效率稍高。
int score = 78; switch(score / 10){ case 0: case 1: case 2: case 3: System.out.println("咳咳咳"); break; case 9: case 8: case 5: System.out.println("酷酷酷); break; }
第4点例子:
练习:
编写程序,从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。
运用上面特点的第4点
3.3 循环结构
循环结构就是根据循环条件,重复性的执行某段代码
注意:可以嵌套循环完成更丰富的功能
有while,do-while,for三种循环语句
(注:JDK1.5提供了foreach循环,方便的遍历集合,数组元素)
初始化部分
循环条件部分
循环体部分
迭代部分
先判断条件,条件成立就进入循环体
while(boolean表达式){ java语句; }
先进入循环体运行,再判断循环条件(即这种循环至少会执行一次循环体内的语句)
do{ java语句; }while(boolean表达式);
for(表达式1;表达式2;表达式3){ java语句; }
for循环开始执行,先执行表达式1,并只执行一次。进而判断表达式2的结果,如果是true,则执行java语句。再执行表达式3,然后再判断表达式2的结果,直到表达式2的结果是false,则for循环结束。
3.4 可以用来控制循环结构的语句:break、continue和return
使用switch-case结构或者循环结构中,一旦执行到break,就跳出当前循环体,默认情况下结束离它最近的一个循环。
使用在循环结构中,一旦执行到continue,就跳出当次循环。
在嵌套循环中,使用带标签的break和continue,可通过标签指明要终止的是哪一层语句块。
举例:
return并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。