在什么情况下将命令放在Java for循环更新语句中是有用的?

Cof*_*fee 8 java for-loop

我昨天发现你可以创建一个看起来像这样的Java for循环

for (int j = 0; j < myArray.length; System.out.println(j), j++ ) {

/* code */

}
Run Code Online (Sandbox Code Playgroud)

这对我来说真的很不寻常.何时编码可接受/有用?

tix*_*opi 7

如果我有两个循环变量,我只会做这样的事情,例如:

for(int i = 0, j = 10; i < 10 && j > 0; i++, j--) {
...
}
Run Code Online (Sandbox Code Playgroud)

除此之外,我不建议这样做,因为它模糊了for循环实际做的事情.最好在实际体内放置任何带副作用的方法调用.


Iva*_*kov 2

java 官方文档对 for 循环的描述如下:

for语句的一般形式可以表示如下:

for(initialization; termination; increment) {
     statement(s) 
}
Run Code Online (Sandbox Code Playgroud)

使用此版本的 for 语句时,请记住:

  1. 初始化表达式初始化循环;当循环开始时,它会执行一次。
  2. 终止表达式的计算结果为 false 时,循环终止。
  3. 每次循环迭代后都会调用增量表达式;该表达式增加或减少一个值是完全可以接受的。

因此,虽然增量System.out.println(j)部分中可能有类似的内容,但根据官方文档,这违反了编码约定。

之所以允许增量部分有多个逗号分隔的语句,是因为在for循环执行过程中可能需要调整多个变量的值。因此,只有在这种情况下,使用这种语法糖既是可以接受的,也是有用的。以下示例说明了这种情况:

for(int i = 0, j = 10; i < 10 && j >= 0; i++, j--) {
   // Statements
}
Run Code Online (Sandbox Code Playgroud)