在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++;
}
在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++;
}
有些人可能会发现,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
这样的代码不会有所不同班级到班级。
我觉得'break'更直接,标志更难调试,特别是如果你有多个标志。当然,这是主要的意见基础。 – Christian 2015-02-06 15:19:24
我在for循环中使用标志实际上已经收到很多悲伤。然而,对于你说你应该'不''使用语言中的某些东西似乎有点可笑 – 2015-02-06 15:19:44
@Christian @austinwernli,我编辑说明这主要是一个意见问题,但我已经添加了一个例子我个人发现'break'的情况很难调试,但这又是一个意见。 – 2015-02-06 15:24:31
我要看你的意思是“最好”?随着休息时间的推移,您可以尽早退出循环,以便更高效。
您可以尽早用标志退出...... – 2015-02-06 15:21:30
我宁愿第一个,原因goto
被认为是有害的。而exit
就像是goto
。但更重要的是:在编写if
子句时,请始终使用{}
。
另外,使用条件时,请指定一个名称。理解ageBelow18
而不是(我知道代码是不正确的)几乎更简单。
break
存在是有原因的吧!
while(a < 5){
if(a == 3)
break;
else
a++;
}
非常简单的答案,去休息,少标志,少调试,更容易维护。从while
变为for
循环很简单,不需要对逻辑进行任何修改。想想你需要添加更多条件的场景......
我的意见是,如果你不明白break
和continue
的用法,那么你可能会一直为国旗。但是,不仅有一个答案。你的问题是什么选择是更好的退出循环,从你的两个例子,选项很简单。我的意见是break
之一。
现在有些人会使用标志和一些中断,他们给代码样本更适合。但这不是你的问题!
我可以给你很多例子,其中一些我会去flag
和其他的break
和一些混合两者。这取决于我的循环将要处理什么。
break
是为了表明,如果我们达到这个条件,我们将退出循环emiditely。这在一些循环逻辑中非常重要。 即使当你/同事添加更多的逻辑时,在该条件之前或之后,环路仍然会退出到达break
的地方。
有时候你可能想标记你达到了一个条件,但是仍然想要通过循环覆盖的所有指令,这里有一个bool帮助你停止循环,但是在它通过所有的逻辑之后。
如果您不以正确的方式使用标志/中断,那么您的系统可能会非常奇怪,特别是在添加新逻辑时。
请记住,您也可以使用带有标签的break
和continue
,该标签不太常见但很好知道。
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");
}
}
第一个片段在语法上是错误的 - =
是赋值运算符。您正在寻找平等的运营商,==
:
while ((a < 5) && (exit == false)) {
或者更好的是,因为exit
是boolean
,只需直接评价它:
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
,并不意味着你应该盲目地总是使用它们。选择使代码看起来更好,更易于维护的内容。
你提交的这两个选项都不如两个选择。
看到,因为你直接简单的比较后退出循环,则最好的选择是:
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)
表明退出循环的唯一方法是休息,所以程序员应该留意他们。这些中断也应该在循环体的顶部组合在一起,所以它们可以作为防护措施,防止循环体在命中条件时被执行。
我会选择break语句,因为:
还有一个continue关键字可以让你在必要时跳过部分代码。
我对此的看法是,这确实是一个意见问题。您选择的替代方案还包括例外和退货声明。 – njzk2 2015-02-06 15:19:16
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
省略第二个片段中多余的“else”。 – xehpuk 2015-02-06 15:24:45