6

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

  • 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;
        }
}
4

2 回答 2

7

满足条件后,使用该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;
    }
}
于 2013-04-29T00:44:26.877 回答
0

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

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

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

如果您将其放在检查其他任何内容之前,您将立即退出循环。

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

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

于 2013-04-29T00:52:25.380 回答