在Java的`while`循环中使用`break`语句有什么问题?
我参加了一个关于Java的会议,演讲者说在在Java的`while`循环中使用`break`语句有什么问题?,java,while-loop,break,Java,While Loop,Break,我参加了一个关于Java的会议,演讲者说在while循环中使用break语句是一种不好的做法。他说可以使用它,但从“良好的编码实践”的角度来看,不应该使用它。他无法令人满意地解释为什么会这样 但是,他还提到,对于for循环,此限制无效。有人能解释一下吗 编辑:我不是说while(真的)。一般来说,任何时候(条件)。许多人认为中断和继续像GOTO或指令一样,因为它们中断执行流程并跳转到不同的点。一个好的做法是对每一个执行块都有一个单独的入口和出口点。 < P>许多考虑中断和继续像GOTO或指令,因
while
循环中使用break
语句是一种不好的做法。他说可以使用它,但从“良好的编码实践”的角度来看,不应该使用它。他无法令人满意地解释为什么会这样
但是,他还提到,对于for
循环,此限制无效。有人能解释一下吗
编辑:我不是说while(真的)。一般来说,任何时候(条件)。
许多人认为中断和继续像GOTO或指令一样,因为它们中断执行流程并跳转到不同的点。一个好的做法是对每一个执行块都有一个单独的入口和出口点。
< P>许多考虑中断和继续像GOTO或指令,因为它们中断执行流程并跳转到不同的点。一个好的做法是为每个执行块都有一个入口和出口点。IMO,在while循环中使用break
并不是那么糟糕。但我能猜出演讲者为什么这么说
如果我有这样一个while循环:
while (condition1) {
if (condition2) {
break;
}
// do other stuff
}
通过执行以下操作,您完全可以缩短代码:
while(condition1 && !condition2) {
// do other stuff
}
演讲者可能认为while循环中的中断
s是不必要的,因为你可以只写你应该写它们的所有条件,即在偏执论中
然而,情况并非如此。如果我有这个while循环:
while (condition1) {
// do other stuff
if (condition2) {
break;
}
}
如何更改它,使其不使用break
while (condition1) {
// do other stuff
if (condition2) {
condition1 = false;
}
}
这对我来说似乎不太好
让我们把它放到一段有意义的代码中。你认为哪一个更具可读性:
while(noWallInFront) {
walk();
if (sawFriend) {
sayHi();
break;
}
}
或
显然是第一个,对吗?第二种方法听起来像是把你的朋友当作一堵墙。IMO,在while循环中使用
break
并没有那么糟糕。但我能猜出演讲者为什么这么说
如果我有这样一个while循环:
while (condition1) {
if (condition2) {
break;
}
// do other stuff
}
通过执行以下操作,您完全可以缩短代码:
while(condition1 && !condition2) {
// do other stuff
}
演讲者可能认为while循环中的中断
s是不必要的,因为你可以只写你应该写它们的所有条件,即在偏执论中
然而,情况并非如此。如果我有这个while循环:
while (condition1) {
// do other stuff
if (condition2) {
break;
}
}
如何更改它,使其不使用break
while (condition1) {
// do other stuff
if (condition2) {
condition1 = false;
}
}
这对我来说似乎不太好
让我们把它放到一段有意义的代码中。你认为哪一个更具可读性:
while(noWallInFront) {
walk();
if (sawFriend) {
sayHi();
break;
}
}
或
显然是第一个,对吗?第二个听起来像是你把你的朋友当作一堵墙。我认为这没有任何问题。当我们不想再循环时,我们使用break语句。可能的重复只是学术上的废话<代码>中断内部
而
在现实世界中一直在这里使用。学术界长期以来倾向于设置或清除布尔值而不是break
语句,通常需要为此引入额外的变量。忽略它。我认为打破或继续一个循环是可以的,如果你只有一个中断或继续,如果你需要更多,那么有些东西是可疑的。但那只是我的问题opinion@F.Klein:我说的不是,而是(true)
。一般来说,对于任何while(条件)
。我认为这没有任何问题。当我们不想再循环时,我们使用break语句。可能的重复只是学术上的废话<代码>中断内部而
在现实世界中一直在这里使用。学术界长期以来倾向于设置或清除布尔值而不是break
语句,通常需要为此引入额外的变量。忽略它。我认为打破或继续一个循环是可以的,如果你只有一个中断或继续,如果你需要更多,那么有些东西是可疑的。但那只是我的问题opinion@F.Klein:我说的不是,而是(true)
。一般来说,对于任何while(condition)
。免责声明:基于意见的,等等——然而,我认为如果你诉诸中断,你可能首先就做出了一个糟糕的循环定义。您的示例基本上告诉程序走向墙。然后定义该规则的异常。为什么?只需定义一个可以遵循的规则即可。例如,while(walkingIsAGoodThing){if(sawFriend){stopToTalk();walkingIsAGoodThing=false}if(wallinfort){walkingIsAGoodThing=false}一个控制流,没有异常,没有意外。免责声明:基于意见的,等等——然而,我认为如果你求助于中断,你可能一开始就做出了一个糟糕的循环定义。您的示例基本上告诉程序走向墙。然后定义该规则的异常。为什么?只需定义一个可以遵循的规则即可。例如,while(walkingIsAGoodThing){if(sawFriend){stopToTalk();walkingIsAGoodThing=false}if(wallinfort){walkingIsAGoodThing=false}一个控制流,没有异常,没有意外。