在循环条件中不等于与不等式 - 在java中

时间:2014-09-29 00:50:44

标签: java performance loops boolean logic

我和我的同事刚刚参加辩论 - 这重新点燃了大学的记忆。

特别是我的一位讲师总是这样编写他的for循环:

for(int i = 0; i != max; i++){ ... }

对我来说这似乎不对,因为如果你不小心修改了我,你有可能把程序挂起到无限循环中,我的同事也同意我的看法。

据我所知,最常见的循环编写方式是:

for(int i = 0 ; i < max; i++){ ... }

那么每种方法的优点/缺点是什么?

3 个答案:

答案 0 :(得分:3)

如果变量从未在循环中变异,增加一个值,该值保证从起始值(在本例中为10)达到,则两个循环都是等效的。

如果您决定在增量阶段跳过值, 保证完全达到终端条件,那么!=表单将会生效在无限循环中。

示例:

for(int i = 0; i < 10; i += 3) { } // will stop after four iterations

for(int i = 0; i != 10; i += 3) { } // i will exceed 10, and will *not* stop

一般惯例一直是在决定循环时使用有界不等式而不是严格的不等式;也就是说,一个循环,而低于某个值,而不是 某个值。

对于您正在迭代的内容以及您的最终条件,保持明确和清晰也是一件好事。如果你指定一个!=,下一个阅读代码的人就会假定你不想让这个数字成为下一个迭代的一部分,当意图真的达到但不包括时。

Clarity 是关键所在。

答案 1 :(得分:1)

告诉你的朋友:聪明的人知道西红柿是fruit and not a vegetable,聪明的人知道你不把西红柿放在水果沙拉里。

重点是:是的,技术上他可以写这个for(int i = 0; i != max; i++){ ... },但如果其他程序员会读它 - 他们很可能会质疑原因。保持简单和一致。

如前所述:如果值在for循环中发生变化,你可能会以无限循环结束 - 不要这样做。

答案 2 :(得分:0)

1)使用第一个循环,想象一下如果在循环内的某个点向i添加一些内容以便i > max将会发生什么。你只是给自己一个巨大的循环。
当然你可能真的想要执行循环只要i != max但在那种情况下 while(i != max)更容易阅读。

如果你能以某种方式保证i永远不会超过max,那么你选择第一个循环的唯一方法是。

2)第二个循环是更简单的for循环阅读。

3)如果要循环使用max,该怎么办?你必须正确i != max + 1; i++,在这种情况下我的第二点成立,第二个循环更容易阅读。