2015-02-06 82 views
2

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

此:

boolean exit = false; 

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

或者这样:

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

我对此的看法是,这确实是一个意见问题。您选择的替代方案还包括例外和退货声明。 – njzk2 2015-02-06 15:19:16

+1

http://stackoverflow.com/questions/3922599/is-it-a-bad-practice-to-use-break-in-a-for-loop,http://stackoverflow.com/questions/18188123/is -it-bad-practice-to-use-break-to-exit-a-loop-in-java,http://programmers.stackexchange.com/questions/58237/are-break-and-continue-bad-programming - 实践 – Sikorski 2015-02-06 15:22:21

+0

省略第二个片段中多余的“else”。 – xehpuk 2015-02-06 15:24:45

回答

4

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

试想一个loop体包含超过500行代码,与位于任何地方的一些break报表,它可能更难,您可以直观退出loop的一切准备。

为什么我喜欢使用flag的另一个原因是,您可以为结束点指定明显的名称,而不仅仅是break

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

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

这可能是有趣然而,要知道,与循环打交道时,有continue关键字,让你可以不exit循环,但skip直接到下一个iteration

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

如果真是两者之间的最佳途径,Java可能不会允许其他;)

我想最重要的是使用相同的约定在您co-worker这样的代码不会有所不同班级到班级。

+6

我觉得'break'更直接,标志更难调试,特别是如果你有多个标志。当然,这是主要的意见基础。 – Christian 2015-02-06 15:19:24

+1

我在for循环中使用标志实际上已经收到很多悲伤。然而,对于你说你应该'不''使用语言中的某些东西似乎有点可笑 – 2015-02-06 15:19:44

+0

@Christian @austinwernli,我编辑说明这主要是一个意见问题,但我已经添加了一个例子我个人发现'break'的情况很难调试,但这又是一个意见。 – 2015-02-06 15:24:31

0

我要看你的意思是“最好”?随着休息时间的推移,您可以尽早退出循环,以便更高效。

+2

您可以尽早用标志退出...... – 2015-02-06 15:21:30

0

我宁愿第一个,原因goto被认为是有害的。而exit就像是goto。但更重要的是:在编写if子句时,请始终使用{}

另外,使用条件时,请指定一个名称。理解ageBelow18而不是​​(我知道代码是不正确的)几乎更简单。

+2

关于'{}'建议,我不认为这是必要的。这一切都取决于它是否使代码更具可读性。 – Christian 2015-02-06 15:24:16

+1

这是正确的。这是没有必要的,但有多少人后来遇到问题,导致忽略它。 – dec 2015-02-06 15:31:01

+0

我也认为在一个条件下做一个简单的单行语句时真的不需要'{}'。 – 2015-02-06 15:34:00

4

break存在是有原因的吧!

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

非常简单的答案,去休息,少标志,少调试,更容易维护。从while变为for循环很简单,不需要对逻辑进行任何修改。想想你需要添加更多条件的场景......

我的意见是,如果你不明白breakcontinue的用法,那么你可能会一直为国旗。但是,不仅有一个答案。你的问题是什么选择是更好的退出循环,从你的两个例子,选项很简单。我的意见是break之一。

现在有些人会使用标志和一些中断,他们给代码样本更适合。但这不是你的问题!

我可以给你很多例子,其中一些我会去flag和其他的break和一些混合两者。这取决于我的循环将要处理什么。

break是为了表明,如果我们达到这个条件,我们将退出循环emiditely。这在一些循环逻辑中非常重要。 即使当你/同事添加更多的逻辑时,在该条件之前或之后,环路仍然会退出到达break的地方。

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

如果您不以正确的方式使用标志/中断,那么您的系统可能会非常奇怪,特别是在添加新逻辑时。

请记住,您也可以使用带有标签的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"); 
    } 
} 
1

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

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

或者更好的是,因为exitboolean,只需直接评价它:

while (a < 5 && !exit) { 

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

一旦您将项目指导方针的注意力放在窗口外面,这完全是一个偏好问题。就个人而言,我倾向于选择break声明,特别是如果我有几个条件需要评估。例如:

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

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

0

你提交的这两个选项都不如两个选择。

看到,因为你直接简单的比较后退出循环,则最好的选择是:

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

这是因为你需要在执行前身体检查两个条件,你不需要做退出循环时有什么特别之处。

但是,如果你需要确实需要一些特殊的逻辑,当某个条件被击中,那么你应该使用一段时间的真循环和休息。

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)表明退出循环的唯一方法是休息,所以程序员应该留意他们。这些中断也应该在循环体的顶部组合在一起,所以它们可以作为防护措施,防止循环体在命中条件时被执行。

0

我会选择break语句,因为:

  • 代码更干净
  • 无需额外的代码声明
  • 调试的代码更容易
  • 是很常见惹了不少在条件上声明的标志。你不想在同一行上获得很多嵌套条件。

还有一个continue关键字可以让你在必要时跳过部分代码。

相关问题