Reg for(int index = 3; index--> 1;)

时间:2011-12-05 09:37:29

标签: java

当我执行下面的代码时,我对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。

4 个答案:

答案 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循环中,条件在每个循环之前执行,包括第一个循环。因此,执行顺序是:

  1. int index = 3;
  2. index--;
  3. 测试index > 1
  4. 执行循环
  5. 转到2。
  6. 如您所见,在第一个循环开始时,索引将为2

答案 3 :(得分:0)

比较后

index-- > 1

指数下降。 要解决这个问题,只需使用默认的for循环:

for(int index = 3; index > 1; index--)
{
   ... code
}

希望这能解决你的问题。