For循环条件约定

6

我最近讨论了Java中for循环中使用非计数器相关条件的问题:

for(int i = 0; o.getC() < 10; i++)
    o.addC(i);

请问是否有任何“官方”的约定规范适用于此类 for 循环条件?我认为这种方式比等价的 while 循环更容易阅读,因为所有循环参数都在第一行放在一起:

int i = 0;
while(o.getC() < 10) {
    i++;
    o.addC(i);
}

甚至更糟糕的是:
int i = 0;
while(o.getC() < 10)
    o.addC(++i);

1
非计数器相关条件是什么意思?这个for循环明显与计数器有关。 - user5821336
1
for循环是首选(在我看来),因为1)i的作用域限定在循环内;2)你被迫记住在每次迭代中递增(或明确不递增)i。这里的第二个和第三个选项没有特别的优势,并且可读性较差(尤其是o.addC(++i);)。 - Andy Turner
所谓计数器相关条件,是指直接评估计数器变量的条件,例如 i < 10 - Genesis Rock
你知道 for 循环中的所有部分都是可选的吗?for (;;) 相当于 while (true)。所以,唯一的“惯例”就是它需要有一个条件,但如果被省略,它会被评估为 true。 - OneCricketeer
4个回答

1

for循环在几乎所有情况下都比等价的while解决方案更常用。它们可以用于数组、列表和标准数据结构。

另一方面,while通常与流以及无限长迭代一起使用。


1
大多数开发者会期望一个 for 语句由三个部分组成:

  • 变量的初始化
  • 基于该变量的终止条件
  • 对变量的增量操作

如果您更改代码以包含意外的内容,它将变得更难阅读,因此更难维护。

此外,我认为 while 循环可以更清晰地表达您的意图:o.getC() 小于 10 时执行某些操作。这个“某些操作”恰好是: 添加一个递增的数字

长话短说:对于“非计数器相关条件”,请使用 while 循环。


0

这样怎么样:

for(int i = 0; i < MAX_ITERATIONS; i++)
{
    o.addC(i);
    if (o.getC() >= 10)
        return o; // or break
}

如果addC没有按照你的期望执行,这可以防止无限循环。


0

关于for循环的一个好处是有一种快捷方式。所以如果你想做数组中的所有项目,只需要按照以下方式操作:

(double number : arrayName) 这里double是类型,number是您为每个元素指定的名称(实际上无论您称其为什么,您都会在此处将每个值称为“number”)。arrayName是您正在引用的数组的名称。

如果你想访问每个元素/对象,这是最快的方法。


它被称为增强型for循环(我称其为foreach循环)。实际上,从速度上来说它并不是“最快”的,因为在底层它必须进行类型转换并仍然使用常规的for循环。 - OneCricketeer
啊,抱歉,我自己也是一个新手程序员。只是想尽我所能帮助一下 :p - Tal C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接