【问题标题】:How to break out of nested loops如何跳出嵌套循环
【发布时间】:2015-04-24 21:22:00
【问题描述】:

我目前正在制作一个程序,其中需要嵌套循环来搜索数组以在数组中找到合适的输入点。这是一个例子:

public void placePiece(int column) {
        boolean goodInput = false;

        while(!goodInput) {
            for(int x = 5; x >= 0; x--) {
                if(boardStatus[x][column] == 0) {

                    setRow(x);
                    boardStatus[x][column] = 1;
                    goodInput = true;
                    break;

                }else if(boardStatus[0][column] == 1) { 
                    goodInput = false;
                    break;
                }else{

                }

            }
        }
    }

该方法接受一个参数,该参数是该片段应位于的列(由鼠标侦听器接收)。如果二维数组中的列已经填充到顶部,程序就会陷入“else if”中的无限循环,我不确定如何跳出这个循环。如果输入错误,我该如何跳出这个循环,以便用户可以尝试提供另一列作为输入。

【问题讨论】:

  • 使用 try/catch 会有所帮助
  • @ryekayo 因为没有引起错误,我会发现什么?
  • 您需要创建自己的异常并捕获您正在寻找的被认为是错误输入的内容

标签: java arrays loops


【解决方案1】:

一个简单的方法是使用labeled break statement

myLabelName:
for(outer loop)
    for(inner loop)
        if(condition)
            break myLabelName;

当您在找到所需内容后不想浪费时间迭代其他对象/项目时,这很有用。


要展开,当您只使用break;(不带标签)时,它将退出父循环。 例如:

myLabelName:
for(outer loop){
    for(inner loop){
        if(condition){
            break myLabelName; //breaks outer loop
        }
        else if(other condition){
            break; //breaks parent (inner/nested) loop
        }
     }
 }

【讨论】:

    【解决方案2】:

    当您处于elseif 循环中时,您将再次分配goodInput = false;,因此while 条件再次变为真并永远循环。

    如果你想在收到正确的输入之前输入,可以使用do(){}while()循环

    【讨论】:

      【解决方案3】:

      根据您提供的描述,我不确定 else if 语句的用途。据我了解,您正在检查某一列中的所有行以查看该单元格是否已设置?

      while 循环和 for 循环的组合似乎也很可疑。在这种情况下,似乎不需要 while 循环。

      如果整列都填满了会发生什么?这个方法应该返回一个状态标志吗?

      这不能用一个for循环来实现吗?

      for (int x = 5; x >= 0; --x)
      {
          if(boardStatus[x][column] == 0) {
              setRow(x);
              boardStatus[x][column] = 1;
              break;
          }
      }
      

      如果需要,您可以跟踪一个标志变量以指示您是否曾发现一个空单元格。

      【讨论】:

        【解决方案4】:

        你可以使用 flag 也可以使用 goto 语句

        标志说明

        code
        
        bool  flag = true;
        for (int i = 0; (i < 10) && (flag==true); i++)
        {
           for(int j = 0; (j < 10) && (flag==true); j++)
           {
              if (condition)
                 flag = false;
           }  
        }
        

        【讨论】:

        • 这看起来像一个 C++ 答案,你能格式化它以匹配 Java 语法吗?
        【解决方案5】:

        在循环之后更改参数:

        public void placePiece(int column) {
            boolean goodInput = false;
        
            while(!goodInput) {
                for(int x = 5; x >= 0; x--) {
                    if(boardStatus[x][column] == 0) {
        
                        setRow(x);
                        boardStatus[x][column] = 1;
                        goodInput = true;
                        break;
        
                    }else if(boardStatus[0][column] == 1) { 
                        goodInput = false;
                        break;
                    }else{
        
                    }
        
                }
                goodInput = true; // <-----
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2022-09-24
          • 2010-09-24
          • 2019-04-19
          • 2016-04-08
          • 1970-01-01
          • 2014-06-28
          • 2013-09-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多