0

我看到了源代码:

public class Test{
   public static void main(String[] args)
   {
    counting: 
       for(int k = 0; k < 100; k++)
       for(int i = 0; i < 100; i++)
         if(i == 9) break counting;
   }    
}

现在我实现了如下循环:

public class Test{
   public static void main(String[] args)
   {
      counting: 
      for(int k = 0; k < 100; k++)
      {
         System.out.println(k);//to see how many times the outer loop runs 
         for(int i = 0; i < 100; i++)
         {            
             if(i == 9) break counting;
         }
     }
}

如果我没记错的话,我知道外部循环运行一次,内部循环运行 9 次。我得出的结论是,这是实现了流控制的嵌套循环。我不明白的是什么是角色counting

4

5 回答 5

3

counting:是一个标签。你打电话时

break counting;

代码将跳转到外部 for 循环的末尾。

于 2013-06-08T10:38:56.863 回答
2

break它定义了该语句将停止哪个循环。如果不使用标签,则内部循环将被中断,但外部循环将正常继续。

于 2013-06-08T10:40:07.587 回答
2

break语句本身可以让您跳出单个循环;在大多数情况下,这就足够了,但在某些情况下,您必须同时退出多个循环。

将标签添加到要从中中断的循环并从break语句中引用该标签可让您同时结束多个嵌套循环。

您帖子中的代码不是一个很好的说明;一个更好的用例是在多维数组中搜索。假设您想找到一对{row, col}这样的array[row][col] == searchTerm。你可以这样做:

int row = -1, col = -1;
searching:
for(int r = 0 ; r != MAX_ROW ; r++) {
    for(int c = 0 ; c != MAX_COL ; c++) {
        if(array[r][c] == searchTerm) {
            row = r;
            col = c;
            break searching;
        }
    }
}
于 2013-06-08T10:40:32.463 回答
0

当你嵌套循环时,如果你想要break一个for loop,你应该将目标定义为break,这样你就可以label解决这个问题。例如:

lb1:
for(int i = 0; i < 10;i++){
  lb2:
  for(int j = 0; j < 10;j++){ 
     for(int i = 0; i < 10;i++){
         if(a) break lb2; // this will break second loop
         if(b) break lb1; // this will break first loop
     }
  } 
}
于 2013-06-08T10:39:50.583 回答
0

我希望你能够明白!

public class Test {
    public static void main(String[] args) {
        counting: for (int k = 0; k < 100; k++) {
            System.out.println(k);
            for (int i = 0; i < 100; i++) {
                if (i == 9) {
                    System.out.println("I'm going to break!");
                    break counting;    // -----┐
                }                      //      |
            }                          //      |
        }                              //      |
        System.out.println("Broken!"); // <----┘
    }
}
于 2013-06-08T10:49:20.283 回答