Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java的`while`循环中使用`break`语句有什么问题?_Java_While Loop_Break - Fatal编程技术网

在Java的`while`循环中使用`break`语句有什么问题?

在Java的`while`循环中使用`break`语句有什么问题?,java,while-loop,break,Java,While Loop,Break,我参加了一个关于Java的会议,演讲者说在while循环中使用break语句是一种不好的做法。他说可以使用它,但从“良好的编码实践”的角度来看,不应该使用它。他无法令人满意地解释为什么会这样 但是,他还提到,对于for循环,此限制无效。有人能解释一下吗 编辑:我不是说while(真的)。一般来说,任何时候(条件)。许多人认为中断和继续像GOTO或指令一样,因为它们中断执行流程并跳转到不同的点。一个好的做法是对每一个执行块都有一个单独的入口和出口点。 < P>许多考虑中断和继续像GOTO或指令,因

我参加了一个关于Java的会议,演讲者说在
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}一个控制流,没有异常,没有意外。