当我执行下面的代码时,我对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
我完全不明白索引的值是2而不是3,尽管for循环中的条件“index--> 1”也是1。 期待尽快回复
提前致谢, Nusrath。
答案 0 :(得分:7)
1)您正在递减条件的index
部分,该条件甚至在第一次迭代之前执行。这就是你在第一次迭代中看到index = 2的原因。
2)你在条件中使用后缀递减,这意味着“递减,但表达式的结果是原始值”,这就是为什么你看到index = 1 - 当index是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");
}
答案 1 :(得分:0)
我完全不明白索引的值是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--)
它将到达for
循环的主体,索引值为3和2。
答案 2 :(得分:0)
在for
循环中,条件在每个循环之前执行,包括第一个循环。因此,执行顺序是:
int index = 3;
index--;
index > 1
如您所见,在第一个循环开始时,索引将为2
答案 3 :(得分:0)
比较后
index-- > 1
指数下降。 要解决这个问题,只需使用默认的for循环:
for(int index = 3; index > 1; index--)
{
... code
}
希望这能解决你的问题。