繁体   English   中英

为什么这两个for循环会产生不同的结果?

[英]Why do these two for loops give different results?

int num=1025;
for (int i = num; i<1030; System.out.println("i =" + i), i++); //loop 1

System.out.println(""); // for spacing results

for (int i = num; i<1030; System.out.println("i =" + i)) { //loop 2
    i++;
}

您可以在Java编译器上运行它们,然后您将看到其中的内容。

这是我第一次在for循环的增量表达式中看到println

差异是由于这样的事实,在第二个循环中, i++在增量表达式之前执行,因此println打印i的新值。

在第一个循环中, i在增量表达式中递增,但在println ,因此将打印i的先前值。

因为:

  • loop1在递增i之前先打印i

  • loop2将其递增后输出i

在for循环中

  for (<initial> ; <test> ; <post> ) {
       <body>
  }

循环<body>for循环的<post>子句之前执行。 在您的示例中,您在不同位置具有i的增量...


顺便说一句:循环的两种形式都不好用...此处带有print语句。 永远不要在真实代码中这样做。

这是您的第一个for循环的工作方式:

  • 初始化我到1025
  • 检查条件i <1030
  • 打印,然后递增i,然后从上面的步骤重复

注意打印语句,后跟i值的增量。

这是第二个for循环的工作方式:

  • 初始化我到1025
  • 检查条件i <1030
  • 增加我
  • 打印i的值(注意它将是i +1),然后从上面的步骤2开始重复。

在for循环的每次迭代中:

计算布尔表达式。 如果为true,则执行循环主体。 在for循环的主体执行之后,控制流跳回到更新语句。

因此,对于

for (int i = num; i<1030; System.out.println("i =" + i), i++);

首先它将执行System.out.println("i =" + i) (在for循环的增量条件下的第一条语句),然后将执行i++ (在for循环的增量条件下的第二条语句)

的情况下

for (int i = num; i<1030; System.out.println("i =" + i))

首先它将执行i++ (for循环的主体),然后将运行System.out.println("i =" + i) (在这种情况下为递增条件)

for loop    working is illustrated as below.

    for ( declaration ; condition ; update action ) {
        //for block
    }

下面是执行for循环的顺序。 1.声明2.条件检查3.块执行4.更新操作。

在您的情况下,第二个循环中的println语句在i ++运算符之后执行。 因此,该值在打印到控制台上之前会增加到1026。

for 2nd for循环会将System.out.println("i =" + i)视为您的for循环的更新语句,并且i递增在此执行之前完成。 为了更好地解释它,请考虑任何for循环的结构:

for(initialization; Boolean_expression; update){ //Statements }

初始化步骤首先执行,并且仅执行一次。 然后评估下一个Boolean_expression。 如果找到true,则将执行主体,如果为false,则循环终止。 在主体执行之后,控件跳回到更新语句并执行。

因此在上面的代码中System.out.println("i =" + i)被视为更新语句并最后执行,这就是为什么输出是

i = 1025 i = 1026 i = 1027 i = 1028 i = 1029

i = 1026 i = 1027 i = 1028 i = 1029 i = 1030

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM