为什么这两个for循环给出不同的结果?

时间:2014-12-09 07:43:08

标签: java for-loop

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编译器上运行它们,你会看到我们在说什么。

6 个答案:

答案 0 :(得分:4)

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

不同之处在于,在第二个循环中,i++在增量表达式之前执行,因此println打印新值i

在第一个循环中,i在增量表达式中递增,但在println之后,则打印前一个值i

答案 1 :(得分:1)

由于:

  • loop1在递增之前打印i

  • loop2在递增后打印i

在for循环中

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

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


除此之外:你的循环的两种形式都是糟糕的风格......此时使用print语句。不要在实际代码中这样做。

答案 2 :(得分:0)

这是你的第一个for循环的工作原理:

  • 将i初始化为1025
  • 检查条件i&lt; 1030
  • 打印,然后递增i,然后从上面的步骤重复

注意print语句后跟i值的增量。

这是你的第二个for循环的工作原理:

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

答案 3 :(得分:0)

在for循环的每次迭代中: -

  

评估布尔表达式。如果是,则执行循环体。在执行for循环体后,控制流会跳回到update语句。

因此

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)(在这种情况下这是增量条件)

答案 4 :(得分:0)

for loop    working is illustrated as below.

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

下面是执行for循环的顺序。 宣言 条件检查 3.用于块执行 4.更新行动。

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

答案 5 :(得分:0)

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

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

初始化步骤首先执行且仅执行一次。然后评估下一个Boolean_expression。如果发现为真,则将执行正文,如果为false则循环终止。 在正文执行后,控件跳转到update语句并执行。

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

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

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