【问题标题】:How to break from a loop after the condition is met满足条件后如何从循环中中断
【发布时间】:2013-04-29 00:27:41
【问题描述】:

嗨,过去一个小时我一直在尝试打破这个循环并继续,因为我已经满足了一次我的条件。我的应用程序几乎读取了一系列行并对其进行分析,然后打印出所述变量。线条的外观示例(不包括 .):

  • 10 c = 9+3
  • 20 a = c+1
  • 30 打印 c
  • 40 到 20
  • 50 结束

一切正常,当它到达第 40 行时按预期转到第 20 行,但我希望它转到第 50 行,因为已经去过第 40 行一次。这是我这部分的代码:

while(booleanValue)
{
    if(aString.substring(0, 4).equals("goto"))
    {
        int chosenLine = Integer.parseInt(b.substring(5));
        if(inTheVector.contains(chosenLine))
        {
            analizeCommands(inTheVector.indexOf(chosenLine));
            i++;
        }
        else
        {
            System.ou.println("Line Was Not Found");
            i++;
        }
    }

    else if(aString.substring(0, 3).equals("end"))
        {
            System.out.println("Application Ended");
            booleanValue = false;
        }
}

【问题讨论】:

  • 小改进:您可以将aString.substring(0, 4).equals("goto") 替换为aString.startsWith("goto")。短于 4 个字符的 String 更具可读性和安全性。
  • 您将需要一个命令来说出if <condition> statement 并对其进行评估。
  • 也许“继续”关键字会起作用?
  • 我注意到在格式化您的代码时,他们的 } 缺少第一个 if
  • 你的if-else-if-else 块的顺序很奇怪。 else if 应该在 else 之前。

标签: java loops while-loop break


【解决方案1】:

一旦满足您的条件,使用break 语句完全跳出循环。 Pol0nium 建议使用continue 是不正确的,因为这只会停止当前的循环迭代。

while(foo)
{
    if(baz)
    {
        // Do something
    }
    else
    {
        // exit condition met
        break;
    }
}

所有这些都说了,好的形式表明你想要干净的入口和出口点,以便观察者(也许是你自己,在以后重新访问代码)可以轻松地跟踪它的流程。考虑更改控制 while 循环本身的布尔值。

while(foo)
{
    if(baz)
    {
        // Do something
    }
    else
    {
        // Do something else
        foo = false;
    }
}

如果由于某种原因,您无法触摸控制 while 循环的布尔值,则只需将条件与专门用于控制您的 while 的标志复合:

while(foo && bar)
{
    if(baz)
    {
        // Do something
    }
    else
    {
        // Do something else
        bar = false;
    }
}

【讨论】:

    【解决方案2】:

    您可以按原样使用 booleanValue 保留代码并切换到 do-while 循环。

    do {
     // ... existing code
    } while (booleanValue);
    

    但是,要回答您的具体问题 - 您始终可以使用 java break 关键字。 continue 关键字更多用于跳过循环块的剩余部分并进入另一个循环迭代。

    如果你把它放在你检查其他东西之前,你会立即退出循环。

    if(aString.substring(0, 3).equals("end")) {
        break;
    }
    

    作为附加提示,您可能希望使用String.contains("end")String.endsWith("end") 而不是substring()。这样,如果使用 1 位或 3 位(或更多)数字,您的代码仍然有效。

    【讨论】:

    • 即使我使用 do while,它也会一直循环。问题是它没有转到第 50 行。它一直在第 20 行和第 40 行之间循环。
    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多