一、标签方式
类似于C语言的goto,用法是在最外层循环的上边放置一个标签,然后在里层的循环代码中使用break+标签的方式,就可以跳到最外层循环
public static void main(String[] args) {
outer:
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
if(i==1){
continue outer;//使用continue会跳过这次最外层循环,然后进入下次最外层循环
}
System.out.println("i="+i+" j="+j);
}
}
System.out.println("跳出成功!");
}
结果:
i=0 j=0
i=0 j=1
i=2 j=0
i=2 j=1
跳出成功!
public static void main(String[] args) {
outer:
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
if(i==1){
break outer;//使用break会直接跳出最外层循环
}
System.out.println("i="+i+" j="+j);
}
}
System.out.println("跳出成功!");
}
结果:
i=0 j=0
i=0 j=1
跳出成功!
二、break,continue
break跳出当前循环,通过内部跳出条件控制跳出外部循环,continue的话是跳过本次循环进入下一次循环
for(int i=0;i<4;i++){
for(int j=0;j<5;j++){
System.out.println("i="+i+"; j="+j);
if(j==3) {
i=4;
break;
}
}
}
三、抛出异常
try {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
System.out.println("i=" + i + "; j=" + j);
if (j == 3) {
throw new Exception();
}
}
}
} catch (Exception e) {
System.out.println("e");
}
通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++) {
for(int j=0;j<arr[i].length;j++){
System.out.println(“i=” + i + “,j=” + j);
if(arr[i][j] == 5) {
found = true;
break;
}
}
}