首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reg for (int index = 3;index-- > 1;)

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

Stack Overflow用户
提问于 2011-12-05 17:37:29
回答 4查看 268关注 0票数 0

当我执行以下代码时,我对for循环的执行有疑问

代码语言:javascript
复制
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");
    }
}

输出:

代码语言:javascript
复制
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“中的情况下被打印出来,希望尽快得到回复

提前谢谢你,努斯拉斯。

EN

回答 4

Stack Overflow用户

发布于 2011-12-05 17:40:18

1)您正在递减条件的index部分,该部分甚至在第一次迭代之前执行。这就是为什么你会在第一次迭代中看到index=2。

2)你在条件中使用了后缀-decrement,这意味着“递减,但表达式的结果是原始值”,这就是为什么你会看到index=1 -当索引为2时,条件被满足,但索引被递减到1。

基本上,如果这段代码写成:

代码语言:javascript
复制
for (int index = 3; index > 1; index--)

我也建议你对你的

代码语言:javascript
复制
while (num-- > 1)

循环。基本上,混合副作用运算符和条件几乎总是一个坏主意。这通常会使代码更难阅读和理解--这个问题基本上证明了这一点。

此外,如果您对每个for循环使用大括号,这肯定会有所帮助。因此,不是这样:

代码语言:javascript
复制
for (int index = 3; index-- > 1;)
    System.out.print("index value:" + index + "\n");

写下这个:

代码语言:javascript
复制
for (int index = 3; index > 1; index--) {
    System.out.print("index value:" + index + "\n");
}
票数 7
EN

Stack Overflow用户

发布于 2011-12-05 17:42:37

我完全不明白为什么

的值是2而不是3

以下是条件通过的迭代的执行顺序:

代码语言:javascript
复制
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。也许你想要的是:

代码语言:javascript
复制
for (int index = 3; index > 1; index--)

它将到达索引值为3和2的for循环体。

票数 0
EN

Stack Overflow用户

发布于 2011-12-05 17:42:53

for循环中,条件在每个循环之前执行,包括第一个循环。因此,执行的顺序是:

  1. int index = 3;
  2. index--;
  3. test for index > 1
  4. execute loop
  5. goto 2.

如您所见,在第一个循环开始时,索引将为2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8383320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档