可能需要在出现某些条件时强制退出循环,而不是在循环条件为false之前退出循环。 在这种情况下,可以使用break执行此功能。 break用于完全结束循环并退出循环体。 在任何一个循环中,当在整个循环中遇到break时,系统将完全终止该循环,并开始执行循环后的代码。 在Java中,break语句有三个作用:用switch语句结束语句序列,使用break语句直接退出循环,以及使用break语句实现goto功能。
使用break语句直接强制退出循环(break未标记)时,可以使用break语句强制退出循环,并忽略循环体中其他语句或循环的条件判断。 在循环中遇到break语句时,循环将终止,循环后的语句将重新开始。
例1瑞典钻石参加了1000米赛跑。 在100米的路线上循环行驶。 每走一圈剩下的路程就会减少100米。 跑步的次数是循环的次数。 但是,每跑一圈,教练就会问是否继续下去,回答y就继续跑,否则就放弃。 以下是使用break语句直接强制退出循环的示例。
publicstaticvoidmain (字符串[ ] args ) {
扫描输入=new扫描程序(system.in ); //定义变量保存高雅钻石的回答
字符串answer=' '; //假设一周100米、1000米为10周,则循环次数
for(intI=0; i 10; I ) {
System.out.println ('跑的是' (i 1) '轮);
System.out.println ('还能继续吗?' ); //得到高雅钻石的回答
answer=input.next (; //判断高雅钻石的答案是否为y? 否则,放弃,跳出循环
if (! Answer.equals(y ) ) ) ) )
System.out.println ('放弃');
布雷克;
}
//循环后的代码
System.out.println ('加油! 继续!' );
}
}该程序执行后的效果如下。 跑的是第一圈
还能继续吗?
y
加油! 继续!
跑的是第二圈
还能继续吗?
y
加油! 继续!
第三圈跑了
还能继续吗?
n
尽管for循环设计为从0运行到10,但当雅致的钻石答案不是y时,break语句退出程序循环,继续运行循环体外的代码,然后说:“加油! 继续! ”。 break语句可用于任何Java循环,包括人们有意设置的无限循环。 如果在一系列嵌套循环中使用break语句,则只有最里面的循环终止。 例如:
publicstaticvoidmain (字符串[ ] args ) {
//外循环,循环5次
for(intI=0; i 5; I ) {
System.out.print (第() ) (i 1) ) );
//内循环,设计循环10次
for(intj=0; j 10; j ) {
判断//j是否等于3,如果是,则结束循环
if(j==3) {
布雷克;
}
System.out.print ('内循环的' (j 1 ) '第循环(t ' );
}
System.out.println (;
}
}该程序的执行结果为:第1循环:内循环的第1循环内循环的第2循环内循环的第3循环
第2个循环:内循环第1个循环内循环的第2个循环内循环的第3个循环
第3个循环:内循环第1个循环内循环的第2个循环内循环的第3个循环
第4个循环:内循环第1个循环内循环的第2个循环内循环的第3个循环
第五个循环:内循环的第一个循环内循环的第二个循环内循环的第三个循环,根据程序的执行结果,只结束了内部循环中break语句所在的内部循环,外部循环没有受到任何影响。 注意:一个循环可以有多个break语句,但过多的break语句会破坏代码结构。 switch循环语句的break只影响switch语句,不影响循环。
例2编写Java程序,允许用户输入6个课程的成绩,输入的成绩为负时退出循环; 输入六个合法成绩将计算现有成绩之和。 使用break语句的实现代码如下:
publicstaticvoidmain (字符串[ ] args ) {
int score; //每堂课的成绩
int sum
= 0; // 成绩之和boolean con = true; // 记录录入的成绩是否合法
Scannerinput = new Scanner(System.in);
System.out.println("请输入学生的姓名:");
Stringname = input.next(); // 获取用户输入的姓名
for (int i = 1; i <= 6; i++) {
System.out.println("请输入第" + i + "门课程的成绩:");
score = input.nextInt();// 获取用户输入的成绩
if (score < 0) { // 判断用户输入的成绩是否为负数,如果为负数,终止循环
con = false;
break;
}
sum = sum + score; // 累加求和
}
if (con) {
System.out.println(name + "的总成绩为:" + sum);
} else {
System.out.println("抱歉,分数录入错误,请重新录入!");
}
}运行程序,当用户录入的分数低于 0 时,则输出“抱歉,分数录入错误,请重新录入!”信息,否则打印学生的总成绩。输出结果如下所示。请输入学生的姓名:
zhangpu
请输入第1门课程的成绩:
100
请输入第2门课程的成绩:
75
请输入第3门课程的成绩:
-8
抱歉,分数录入错误,请重新录入!请输入学生的姓名:
zhangpu
请输入第1门课程的成绩:
100
请输入第2门课程的成绩:
68
请输入第3门课程的成绩:
73
请输入第4门课程的成绩:
47
请输入第5门课程的成绩:
99
请输入第6门课程的成绩:
84
zhangpu的总成绩为:471在该程序中,当录入第 3 门课的成绩时,录入的成绩为负数,判断条件“score<0”为 true,执行“con=false”,用 con 来标记录入是否有误。接着执行 break 语句,执行完之后程序并没有继续执行条件语句后面的语句,而是直接退出 for 循环。之后执行下面的条件判断语句,判断 boolean 变量的 con 是否为 true,如果为 true,则打印总成绩;否则打印“抱歉,分数录入错误,请重新录入!”。
使用 break 语句实现 goto 的功能(break 带标签)有时候,在嵌套很深的循环语句中会发生一些不可预料的事情。此时可能更加希望跳到嵌套的所有循环语句之外。通过添加一些额外的条件判断实现各层循环的检测很不方便。幸运的是,Java 与C++不同,Java 提供了一种带标签的 break 语句,用于跳出多重嵌套的循环语句。break 语句可以实现 goto 的功能,并且 Java 定义了 break 语句的一种扩展形式来处理退出嵌套很深的循环这个问题。通过使用扩展的 break 语句,可以终止执行一个或者几个任意代码块,这些代码块不必是一个循环或一个 switch 语句的一部分。同时这种扩展的 break 语句带有标签,可以明确指定从何处重新开始执行。break 除了具有 goto 退出深层循环嵌套作用外,还保留了一些程序结构化的特性。标签 break 语句的通用格式如下:break label;label 是标识代码块的标签。当执行这种形式的 break 语句时,控制权被传递出指定的代码块。被加标签的代码块必须包围 break 语句,但是它不需要直接包围 break 的块。也就是说,可以使用一个加标签的 break 语句来退出一系列的嵌套块,但是不能使用 break 语句将控制权传递到不包含 break 语句的代码块。用标签(label)可以指定一个代码块,标签可以是任何合法有效的 Java 标识符,后跟一个冒号。加上标签的代码块可以作为 break 语句的对象,使程序在加标签的块的结尾继续执行。下面是使用带标签的break 语句的示例。
public classGotoDemo {
public static void main(String[] args) {
label: for (int i = 0; i < 10; i++) {
for (int j = 0; j < 8; j++) {
System.out.println(j);
if (j % 2 != 0) {
break label;
}
}
}
}
}以上程序的执行结果为:0
1这里的 label 是标签的名称,可以为 Java 语言中任意合法的标识符。标签语句必须和循环匹配使用,使用时书写在对应的循环语句的上面,标签语句以冒号结束。如果需要中断标签语句对应的循环,可以采用 break 后面跟标签名的方式。如在上面代码中,当 j 为 1 时,“j%2!=0”条件表达式成立,则 label 标签所代表的最外层循环终止。注意:通常紧跟 break 之后的标签,必须在 break 所在循环的外层循环之前定义才有意义。
在 switch 语句中终止一个语句序列在 switch 语句中终止一个语句序列,就是在每个 case 子句块的最后添加语句“break;”,这个功能在《Java switch case》已经讲过,这里不在讲述。