目录
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<=5;i++){
System.out.println("请输入第" + i + "名学生的成绩:");
double score = scan.nextDouble();
if(score >= 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的。