[英]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循环的工作方式:
注意打印语句,后跟i值的增量。
这是第二个for循环的工作方式:
在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.