在Java中退出循环的最佳方法是什么?

时间:2015-02-06 15:16:43

标签: java loops while-loop break

在Java中结束loop的最佳方法是什么?

此:

boolean exit = false;

while((a < 5) && (exit = false)){
   if(a == 3)
       exit = true;
   else
       a++;
}

或者这个:

while((a < 5){
   if(a == 3)
       break;
   else
       a++;
}

7 个答案:

答案 0 :(得分:4)

有些人可能会发现break更难调试(个人而言,我更喜欢使用flag)但主要是意见问题。

想象一个loop主体,其中包含超过500行代码,其中一些break语句位于各处,您可能更难以看到退出loop的所有可能性。

我喜欢使用flag的另一个原因是,您可以为结束点提供一个重要的名称,而不仅仅是break

请注意,您还可以在flag循环示例中使用for

boolean flag = false;
for(int i = 0; !flag && i < 10; i++) {
// some treatment
}

然而,可能有趣的是,要知道在处理循环时,continue关键字允许您不{@ 1}}循环,而exit直接指向下一个skip {1}}。

  

在Java中完成循环的最佳方法是什么?

如果两者之间确实存在最佳方式,iteration可能不会允许另一方;)

我想最重要的是使用与Java相同的约定,因此代码在不同类之间没有区别。

答案 1 :(得分:4)

break存在是有原因的,对吧!

while(a < 5){
   if(a == 3)
       break;
   else
       a++;
}

非常简单的答案,去休息,减少标记,减少调试,更容易维护。在没有任何逻辑修改的情况下,从while更改为for循环很简单。想想你需要添加更多条件的场景......

我的意见是,如果您不理解breakcontinue的用法,那么您可能会一直寻找旗帜。但不仅有一个答案。你的问题是什么选项更适合退出循环,从你的两个例子中选项很简单。我的意见是break

现在有些人会使用旗帜,有些人会使用旗帜,他们会给出更适合的代码样本。但这不是你的问题!

我可以举出很多例子,其中一些我会选择flag而另一些代表break,其中一些是两者的混合。这取决于我的循环将要处理的内容。

break是为了表明如果我们达到这个条件,我们将离开循环。这在某些循环逻辑中非常重要。 即使您/同事在该条件之前或之后添加更多逻辑,仍然会在到达break的位置退出循环。

有时候你可能想要标记你已达到一个条件,但仍然希望通过循环所涵盖的所有指令,这里有一个bool帮助你停止循环但是在它通过所有逻辑之后。

如果你没有以正确的方式使用flag / break,你的系统可能会非常奇怪,特别是在添加新逻辑时。

请记住,您还可以使用breakcontinue标签,这不是很常见但很有用。

class ContinueWithLabelDemo {
    public static void main(String[] args) {

        String searchMe = "Look for a substring in me";
        String substring = "sub";
        boolean foundIt = false;

        int max = searchMe.length() - 
                  substring.length();

    test:
        for (int i = 0; i <= max; i++) {
            int n = substring.length();
            int j = i;
            int k = 0;
            while (n-- != 0) {
                if (searchMe.charAt(j++) != substring.charAt(k++)) {
                    continue test;
                }
            }
            foundIt = true;
                break test;
        }
        System.out.println(foundIt ? "Found it" : "Didn't find it");
    }
}

答案 2 :(得分:1)

第一个片段在语法上是错误的 - =是赋值运算符。您正在寻找等于运算符==

while ((a < 5) && (exit == false)) {

或者更好,因为exitboolean,只需直接评估它:

while (a < 5 && !exit) {

除此之外,您应该始终努力遵循您正在进行的项目的惯例。如果它的编码风格更喜欢break s - 只需使用它们。如果它禁止它们,请不要。

一旦您将项目指南考虑因素抛到了窗外,这完全是一个偏好问题。就个人而言,我倾向于选择break语句,特别是如果我有几个条件需要评估。 E.g:

while (a < 5) {
    // do stuff
    if (a == 3) {
        break;
    }
    // do more stuff
    if (b >= 19) {
         break;
    }
    // etc...
}

但最终,您应该根据具体情况对其进行评估。像我一样喜欢break,并不意味着你应该盲目地总是使用它们。选择使代码看起来更好,更易于维护的任何内容。

答案 3 :(得分:0)

我取决于你的意思&#34; best&#34; ?通过中断,您可以提前退出循环,这样效率会更高。

答案 4 :(得分:0)

我更喜欢第一种,因为goto被视为有害。 exit就像goto一样。但更重要的是:在撰写{}条款时请务必使用if

此外,使用条件时,请为其命名。理解ageBelow18而不是today.getYear() < customer.getBirthday().getYear();几乎更简单(代码不正确,我知道)。

答案 5 :(得分:0)

您提供的这些选项都不如两种选择。

看到你在简单比较后直接退出循环,那么最好的选择是:

while (a < 5 && a != 3) {
    a++;
}

这是因为您需要在执行正文之前检查这两个条件,并且在退出循环时不需要做任何特殊的事情。

但是,如果在遇到某个条件时需要一些特殊逻辑,那么你应该使用while true循环并中断。

while (true) {
    if (a >= 5) {
        break; // nothing special, just exit
    } else if (a == 3) {
        a *= 2; // double a before exiting loop
        break;
    }
    a++;
}

while (true)表明退出循环的唯一方法是休息,所以程序员应该留意它们。断点也应该在循环体的顶部组合在一起,因此它们可以作为防护,防止循环体在其条件被击中时被执行。

答案 6 :(得分:0)

我会选择break语句:

  • 代码更干净
  • 无需额外的代码声明
  • 调试代码更容易
  • 在这种情况下宣布许多旗帜是很常见的。您不希望在同一行上获得大量嵌套条件。

还存在continue关键字,可以让您在必要时跳过部分代码。