当条件满足后如何跳出循环

7

嗨,我过去的一个小时一直在尝试从这个循环中跳出并继续,因为已经满足了我的条件。我的应用程序基本上读取一系列的行,并分析它,然后打印所声明的变量。以下是这些行的示例(不包括 . ):

  • 10 c = 9+3
  • 20 a = c+1
  • 30 print c
  • 40 goto 20
  • 50 end

当它到达第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个字符的字符串也更安全。 - Pshemo
你需要一个命令来表达 if <condition> statement 并且对其进行评估。 - Luiggi Mendoza
也许 'continue' 关键字可以起作用? - Pol0nium
@Pol0nium,这不是关于OP的代码,而是关于输入语句。 - Luiggi Mendoza
1
你的 if-else-if-else 代码块的排序有些奇怪。else if 应该放在 else 之前。 - Makoto
显示剩余2条评论
2个回答

8

使用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;
    }
}

0

您可以保留使用 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行之间不断循环。 - user2252310

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接