当我执行以下代码时,我对for循环的执行有疑问
public class LoopTest
{
public static void main (String... args) {
int num = 3;
do {
for (int index = 3; index-- > 1;)
System.out.print("index value:" + index + "\n");
System.out.print("num:" + num + "\n");
} while (num-- > 1);
System.out.print("num:" + num + "\n");
}
}输出:
index value:2
index value:1
num:3
index value:2
index value:1
num:2
index value:2
index value:1
num:1
num:0我完全不明白index的值是2而不是3,还有1在for循环"index-- > 1“中的情况下被打印出来,希望尽快得到回复
提前谢谢你,努斯拉斯。
发布于 2011-12-05 17:40:18
1)您正在递减条件的index部分,该部分甚至在第一次迭代之前执行。这就是为什么你会在第一次迭代中看到index=2。
2)你在条件中使用了后缀-decrement,这意味着“递减,但表达式的结果是原始值”,这就是为什么你会看到index=1 -当索引为2时,条件被满足,但索引被递减到1。
基本上,如果这段代码写成:
for (int index = 3; index > 1; index--)我也建议你对你的
while (num-- > 1)循环。基本上,混合副作用运算符和条件几乎总是一个坏主意。这通常会使代码更难阅读和理解--这个问题基本上证明了这一点。
此外,如果您对每个for循环使用大括号,这肯定会有所帮助。因此,不是这样:
for (int index = 3; index-- > 1;)
System.out.print("index value:" + index + "\n");写下这个:
for (int index = 3; index > 1; index--) {
System.out.print("index value:" + index + "\n");
}发布于 2011-12-05 17:42:37
我完全不明白为什么
的值是2而不是3
以下是条件通过的迭代的执行顺序:
index = 3;
index--;
System.out.print("index value:" + index + "\n");
index--;
System.out.print("index value:" + index + "\n");这就是为什么你会得到2和1的索引值。
之所以可以在循环体内获得index值1,是因为在条件中,index--返回index,然后递减index。也许你想要的是:
for (int index = 3; index > 1; index--)它将到达索引值为3和2的for循环体。
发布于 2011-12-05 17:42:53
在for循环中,条件在每个循环之前执行,包括第一个循环。因此,执行的顺序是:
int index = 3;index--;index > 1如您所见,在第一个循环开始时,索引将为2
https://stackoverflow.com/questions/8383320
复制相似问题