首页 > 编程笔记

Java break和continue的用法

break 关键字可以用在 for、while、do while 循环语句中,功能是跳出整个语句块,结束当前循环的执行。当然,break 语句也可用在 switch 语句中。

在循环体中使用 break 语句有两种方式:带标签和不带标签。break 语句的语法格式如下:
break;         // 不带标签
break label;   // 带标签,label 是标签名
不带标签的 break 语句使程序跳出所在层的循环体,而带标签的 break 语句使程序跳出标签指示的循环体。

【实例1】不带标签的 break 语句的用法。
import static java.lang.Math.sqrt; 
 
public class Test {  
    public static void main(String[] args) { 
        // 输出100以内的所有素数 
        int i; 
        int j; 
        int c = 0; 
        //注释①
        for (i = 2; i <= 100; i++) {
            for (j = 2; j <= sqrt(i); j++) {
                //注释② 
                if (i % j == 0) { 
                    break; 
                } 
            } 
 
            if (j > sqrt(i)) { 
                System.out.printf("%5d", i); // 修正了这里的n%5dn为%5d 
                c++; // 修正了这里的C + +为c++ 
 
                if (c % 5 == 0) { 
                    System.out.println(); // 换行 
                } 
            } 
        } 
    } 
}
运行结果为:
    2    3    5    7   11
   13   17   19   23   29
   31   37   41   43   47
   53   59   61   67   71
   73   79   83   89   97
在上面的程序中,当条件 i%j==0 为 true 时,执行 break 语句,结束注释 ② 处的内层循环,返回注释 ① 处的外层循环中继续执行下一次循环。

【实例2】 带标签的 break 语句的用法。
public class Test {  
    public static void main(String[] args) { 
        // 添加了标签label 
        label: for (int i = 0; i < 5; i++) { 
            for (int j = 3; j > 0; j--) { 
                System.out.println("i的值:" + i + ", j的值:" + j); 
                if (i == j) { 
                    break label;
                } 
            }
        }
    }
}
运行结果为:

i的值:0, j的值:3
i的值:0, j的值:2
i的值:0, j的值:1
i的值:1, j的值:3
i的值:1, j的值:2
i的值:1, j的值:1

上述代码中的 break 语句的后面指定了 label 标签,当条件满足 i==j 时,执行 break 语句,程序就会跳出 label 标签所指定的循环,即外层循环,所以最后输出的是“i的值:1,j的值:1”。

continue语句

continue 语句用来结束本次循环,跳过循环体中尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。

在循环体中使用continue语句有两种方式:带标签和不带标签。continue 语句的语法格式如下:
continue;
continue label;

【实例 3】不带标签的 continue 语句的用法。
public class Test { 
    public static void main(String[] args) { 
        int[] a = new int[10]; // 数组a用来存储被删除的数(以3结尾或3的倍数) 
        int c = 0; // 计数器,记录被删除数的个数 
 
        for (int i = 1; i <= 20; i++) { 
            // 如果i是3的倍数或者以3结尾 
            if (i % 3 == 0 || i % 10 == 3) { 
                // 将满足条件的数(即被删除的数)放入数组a中 
                a[c] = i; 
                // 计数器加1 
                c++; 
                // 跳过后续打印语句,直接开始下一次循环 
                continue; 
            } 
            // 输出不满足条件的数(即保留的数) 
            System.out.print(i + " "); 
        } 
 
        System.out.println(); // 换行 
 
        // 输出被删除的数 
        System.out.print("被删除的数为: "); 
        for (int j = 0; j < c; j++) { 
            System.out.print(a[j] + " "); 
        } 
 
        System.out.println(); // 换行 
    } 
}
运行结果为:

1 2 4 5 7 8 10 11 14 16 17 19 20
被删除的数为: 3 6 9 12 13 15 18


【实例 4】带标签的 continue 语句的用法。
public class Test { 
    public static void main(String[] args) { 
        int[][] matrix = { 
            {1, 2, 3}, 
            {4, 5, 6}, 
            {7, 8, 9}, 
            {10, 11, 12} 
        }; 
 
        int targetValue = 5; // 要查找的目标值 
        int i,j;
        // 外层循环遍历矩阵的行,标签为outerLoop 
        outerLoop: for (i = 0; i < matrix.length; i++) { 
            // 内层循环遍历当前行的列 
            for (j = 0; j < matrix[i].length; j++) { 
                // 如果找到目标值,则使用带标签的continue跳过当前行的剩余部分 
                if (matrix[i][j] == targetValue) { 
                    System.out.println("Found " + targetValue + " in row " + (i + 1) + ", skipping rest of the row."); 
                    continue outerLoop; // 跳转到outerLoop标签处,即外层循环的下一次迭代 
                } 
                // 打印当前元素(非目标值) 
                System.out.print(matrix[i][j] + " "); 
            } 
            System.out.println();  
        } 
    } 
}
程序中用带标签的 continue 语句来处理一个二维数组,当找到目标值 5 时,会跳过当前行的剩余部分并继续处理下一行。

程序的执行结果为:

1 2 3
4 Found 5 in row 2, skipping rest of the row.
7 8 9
10 11 12

推荐阅读