[JavaSE] 特殊的流程控制语句【break】【continue】【return】【lable】—Day10
目录
1.break
2.continue
3.return
4.lable
总结:
1.break
作用:作用在循环中,表示跳出整个循环语句
例子:
while(true){ System.out.println("111"); System.out.println("222"); if(true){ break; } System.out.println("333"); System.out.println("444"); }
运行结果:
案例:循环录入小邓同学5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示
Scanner scan = new Scanner(System.in); double sum = 0; boolean flag = true;//true-正常录入 false-非正常录入 for(int i = 1;i<=5;i++){ System.out.println("请输入第" + i + "门成绩:"); double score = scan.nextDouble(); if(score < 0){//分数录入为负 flag = false; break; } sum += score; } if(flag){ double avg = sum/5; System.out.println("平均分为:" + avg); }else{ System.out.println("分数录入为负,停止录入"); }
运行结果:

2.continue
作用:作用在循环中,表示跳过剩余循环体
举例:
while(true){ System.out.println("111"); System.out.println("222"); if(true){ continue; } System.out.println("333"); System.out.println("444"); }
运行结果:
案例:循环录入Java课5名学生的成绩,统计分数大于等于80分的学生比例。
解决方案一:
Scanner scan = new Scanner(System.in); int num = 0;//记录分数大于等于80分的学生人数 for(int i = 1;i= 80){ num++; } } System.out.println("大于等于80分学生的比例为:" + (num/5.0*100) + "%");
解决方案二:
Scanner scan = new Scanner(System.in); int num = 0;//记录分数大于等于80分的学生人数 for(int i = 1;i<=5;i++){ System.out.println("请输入第" + i + "名学生的成绩:"); double score = scan.nextDouble(); if(score < 80){ continue; } num++; } System.out.println("大于等于80分学生的比例为:" + (num/5.0*100) + "%");
3.return
作用:单独编写,表示结束当前方法
System.out.println("111"); System.out.println("222"); if(true){ return; } System.out.println("333"); System.out.println("444");
4.lable
Java中,一般通过break和continue只能影响一层循环,而通过声明Label配合continue Label以及break Label可以影响到多层循环
例1:嵌套for循环,外层循环5次,内层循环3次,当外层循环到第3次时,在内层循环中结束掉外层循环
a:for(int i = 1;i<=5;i++){ for(int j = 1;j<=3;j++){ System.out.println(i + " -- " + j); if(i == 3){ break a; } }}
运行结果:
例2:
for(int i= 0; i < 3; i++){ System.out.println("outer print: index ["+ i+"]"); for (int j = 0; j<3; j++){ if (j == 1) { continue; } System.out.println("inner print: (" + j+")" ); } } System.out.println("========================"); outer: for (int i = 0 ; i<3 ; i++){ System.out.println("outer print: index ["+i+"]"); for (int j = 0 ; j<3; j++){if (i == 2){ break outer; } if (j == 1) { continue outer; } System.out.println("inner print: ("+j+")"); } }
运行结果:
不难看出,continue Labe和break Label直接影响到了外层循环。
总结:
- 使用标签的唯一理由是:跳出嵌套循环。
- 标签定义在任何语句前基本上都是合法的,但只有定义在循环语句前才可能是可用的。
- 标签名不必是唯一的,只要不在嵌套循环的内外层上定义相同标签即可。
- break只能用于switch语句和循环语句中,continue 只能用于循环语句中。二者功能类似,但continue是终止本次循环,break是终止本层循环
-
break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
-
标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
-
很多语言都有goto语句,goto语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但使程序容易出错。Java中的break和continue是不同于goto的。