-1

当计数变为 9 时,我想从两个 for 循环中退出。我使用break它,但它只能从第一个 for 循环中退出。怎么可能做到?

       ArrayList<String> list = new ArrayList<String>();
        int count = 0;
        System.out.println("Before entering to loop");
        for(int i=0;i<5;i++){
            list.add("XYZ"+i);
            for( int j=0;j<5;j++){
                list.add("ABC"+j);
                count++;
                if(count==9){
                    System.out.println("I want to exit from here.");
                    break;
                }
                System.out.println("i="+i+"::j="+j);
            }
            System.out.println("------------");
        }
        for(String str:list){
            System.out.println(str);
        }
    }
4

7 回答 7

5

您可以使用标签:

OUTER: for (...) {  // <--
    ...
    for (...) {
        if (...)
            break OUTER;  // <--
    }
}

这在 Java 教程的分支语句部分和JLS §14.7中有介绍。

于 2013-08-26T14:02:12.870 回答
1

你可以去标签

标签:

您可以在循环的开头放置标签。标签是一个标识符,后跟一个冒号。它只是您代码中的一个位置。然后,您可以使用 break 后跟标签名称来跳出带有标签的循环。

例如 :

public void twoNum( int num, int val )
{
OUTER_LOOP: // OUTER_LOOP is a label
  for ( int i = 0 ; i < num ; i++ )
  {
      for ( int j = 0 ; j < num ; j++ )
      {
         if ( i + j >= 2 * val )
            break OUTER_LOOP ;
         val = val / 2 ;
      }
  }
  // break comes here if it runs

增量java

于 2013-08-26T14:03:00.817 回答
0

只需添加

(计数!= 9)

for循环的条件:

   ArrayList<String> list = new ArrayList<String>();
    int count = 0;
    System.out.println("Before entering to loop");
    for(int i=0;i<5;i++){
        list.add("XYZ"+i);
        for( int j=0;j<5 && count!=9;j++){
            list.add("ABC"+j);
            count++;
            System.out.println("i="+i+"::j="+j);
        }
        System.out.println("------------");
    }
    for(String str:list){
        System.out.println(str);
    }
于 2013-08-26T15:17:28.103 回答
0

关于语句和标签有很多答案break,但这些结构通常会导致第一次阅读(或一段时间后重新阅读)时难以理解的混乱代码。一般来说,我认为你最好在这种情况下进行重构。

在您的示例中,您知道要在 9 次内部循环迭代后停止,那么您为什么还要费心将循环计数器设置为 5?明确地做你想做的事情会更清楚:

    ArrayList<String> list = new ArrayList<String>();

    System.out.println("Before entering to loop");
    list.add("XYZ"+i);
    for( int j=0;j<5;j++){
      list.add("ABC"+j);
    }
    list.add("XYZ"+i);
    for( int j=0;j<4;j++){
      list.add("ABC"+j);
    }
    for(String str:list){
        System.out.println(str);
    }
}

看看我们能消除多少,生成的代码更清楚地展示了它要做什么。我知道这可能只是一个说明性示例,但我认为这一点仍然存在 - 在您的实际代码中可能存在类似的重构机会。

于 2013-08-26T14:08:13.870 回答
0

在跳出内部循环之前,您可以将布尔标志设置为 true。然后检查外部循环是否为真。如果是这种情况,也要跳出外循环。

于 2013-08-26T14:00:53.703 回答
0

您可以引入一个标志,当计数达到 9 时在内部循环中设置该标志。外部循环将有一个 if 语句来检查该标志值。如果为真,也打破外循环。像这样的东西:

boolean breakLoop = false;
for(int i=0;i<5;i++){
            list.add("XYZ"+i);
            for( int j=0;j<5;j++){
                list.add("ABC"+j);
                count++;
                if(count==9){
                    System.out.println("I want to exit from here.");
                    breakLoop = true;
                    break;
                }
                System.out.println("i="+i+"::j="+j);
            }
             if(breakLoop)
                 break;
            System.out.println("------------");
        }
于 2013-08-26T14:01:22.603 回答
0
 boolean outer=false;
 for(int i=0;i<5;i++){
        list.add("XYZ"+i);
        for( int j=0;j<5;j++){
            list.add("ABC"+j);
            count++;
            if(count==9){
                outer= true;
                System.out.println("I want to exit from here.");
                break;
            }
            System.out.println("i="+i+"::j="+j);
        }
        System.out.println("------------");
        if(outer==true)
        break;
    }
于 2013-08-26T14:05:15.940 回答