程序流程控制
流程控制语句:
- 顺序结构:是程序的默认结构
- 分支结构
- 循环结构
分支结构
if
- 根据判定的结果(真或假)决定执行某个分支的代码
- if适合做区间匹配
if分支的三种格式
-
格式1:
if(条件表达式){ 语句体; }
-
格式2:
if(条件表达式){ 语句体1; }else{ 语句体2; }
-
格式3:
if(条件表达式1){ 语句体1; }else if(条件表达式2){ 语句体2; }else if(条件表达式3){ 语句体3; } …… else{ 语句体n+1; }
switch
-
匹配条件去执行分支,适合做值匹配的分支选择
-
格式:
switch(表达式){ case 值1: 执行代码1; break; case 值2: 执行代码2; break; …… case 值n-1: 执行代码n-1; break; default: 执行代码n; }
执行流程:
- 先执行表达式的值。拿着这个值去与case后的值进行匹配
- 匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支
- 如果case后的值都不匹配则执行default代码
switch分支注意事项
- 表达式类型只能是byte,short,int,char,JDK5开始支持枚举,JDK7开始支持String
不支持double,float,long - case给出的值不允许重复,且只能是字面量,不能是变量
- 漏写break会引发穿透现象
switch的穿透性
- 如果代码执行到没有写break的case块,执行完毕后将进入紧邻的下一个case执行代码块(而且不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性
- switch的穿透性解决的问题:存在多个case分支的功能代码是一样的时候,可以利用穿透性把流程集中到同一处处理,这样可以简化代码
循环结构
for循环
-
控制一段代码反复执行很多次
-
格式:
for(初始化语句; 循环条件; 迭代语句){ 循环体语句; }
水仙花数
-
在控制台输出所有的水仙花数,水仙花数满足两个要求:
- 水仙花数是一个三位数
- 水仙花数的个位,十位,百位的数字立方和等于原数
package com.java.test; import static java.lang.Math.pow; /** * 求水仙花数 */ public class Flowers { public static void main(String[] args) { int a = 0; int b = 0; int c = 0; for (int i = 100; i <= 999; i++) { a = i % 10; b = i / 10 % 10; c = i / 100; if (pow(a, 3) + pow(b, 3) + pow(c, 3) == i) { System.out.println("水仙花数:" + i); } } } }
while循环
-
语法:
初始化语句; while(循环条件){ 循环体语句; 迭代语句; }
明确循环次数使用for循环,循环次数不明确建议使用while
do-while循环
-
语法
初始化语句; do{ 循环体语句; 迭代语句; }while(循环条件);
特点:一定执行至少一次循环体
死循环
-
三种死循环
package com.java.test; /** * 三种死循环 */ public class EndlessLoop { public static void main(String[] args) { for (; ; ) { System.out.println(); } while (true){ System.out.println(); } do { System.out.println(); }while(true); } }
循环嵌套
- 特点:外层循环每循环一次,内部循环全部执行完一次
- 时间复杂度为每层循环执行次数的积,时间复杂度极高,尽量避免循环嵌套
跳转关键字:break,continue
-
break:跳出并结束当前所在的循环的执行
只能用于结束所在循环,或者结束所在switch分支的执行;注意,break不可结束if分支
-
continue:跳出当前循环的当次执行,直接进入下一次循环
只能在循环中进行使用,常常在循环体之前写判断语句以确定为哪一次循环执行continue
break的特殊用法:我们可以为break语句指定一个标签,让代码逻辑退出到那个点。例子:
public class Main { public static void main(String args[]) { outer: //结束标签,标签名自拟 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (j + 1 < i) { System.out.println(); break outer; //即当if条件满足,结束当前整个for循环 } System.out.print(" " + (i * j)); } } System.out.println(); } }
网友评论