【问题标题】:Want to exit from for loops想要退出 for 循环
【发布时间】:2013-08-26 13:59:52
【问题描述】:

当计数变为 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);
        }
    }

【问题讨论】:

标签: java for-loop break


【解决方案1】:

你可以使用标签:

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

Java 教程的Branching Statements 部分和JLS §14.7 对此进行了介绍。

【讨论】:

  • 小心,它可能会将您的代码简化为一盘意大利面。您可能更喜欢在特定方法中使用循环,该方法在完成时可以返回一些值。或者重构你的算法,让它只有一个循环。
【解决方案2】:

你可以选择标签

标签:

您可以在循环的开头放置标签。标签是一个标识符,后跟一个冒号。它只是您代码中的一个位置。然后,您可以使用 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

Incremental java

【讨论】:

    【解决方案3】:

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

    【讨论】:

    【解决方案4】:

    您可以引入一个标志,当计数达到 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("------------");
            }
    

    【讨论】:

      【解决方案5】:
       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;
          }
      

      【讨论】:

        【解决方案6】:

        关于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);
            }
        }
        

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

        【讨论】:

          【解决方案7】:

          只需添加

          (计数!=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);
              }
          

          【讨论】:

            猜你喜欢
            • 2011-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多