Java for循环输出

时间:2015-09-02 07:04:03

标签: java loops for-loop conditional-statements increment

import java.io.*;
public class test {
    public static void main(String args[]) {
        int a=0, b=6, sum;
        for(int i=0; i<=2; i++) {
            System.out.println(i=i++);
        }
    }
}

输出:0 | 1 | 2。但实际上我认为它应该是0 | 2。请解释为什么我错了?提前谢谢。

7 个答案:

答案 0 :(得分:3)

区别在于这行代码:

System.out.println(i=i++);

i ++是一个后增量,意味着它只在语句的其余部分之后执行。

所以,它有点像这样:

System.out.println(
  int tempI = i;
  i = tempI;
  tempI = i + 1;
  );

最后,你打印i的值,而之后没有使用tempI的值,所以认为丢失了。

答案 1 :(得分:1)

答案是为上面代码生成的字节代码。它将i的旧值存储到i中。因此i = i ++语句在逻辑上没有影响。

iconst_0
istore_1
goto 11
getstatic java/lang/System/out Ljava/io/PrintStream;
iload_1
iinc 1 1
dup
istore_1
invokevirtual java/io/PrintStream/println(I)V
iinc 1 1
iload_1
iconst_2
if_icmple 4
return

答案 2 :(得分:0)

在您的代码中:

for(int i=0;i<=2;i++)
{
  System.out.println(i=i++);  //here the value of i is incremented after it is assigned to i.
}

当您执行i=i++时,i会在分配后递增。因此,你没有达到预期的效果。

您可以使用预增量运算符并查看差异。

for(int i=0;i<=2;i++)
{
   System.out.println(i=++i);  
}

以下是一个相关主题,可以帮助您:What is x after “x = x++”?

答案 3 :(得分:0)

即使不使用调试器,也很容易自己测试。

    int a=0,b=6, sum;
    for(int i=0;i<=2;i++)
    {
        System.out.println(i=i++);
        System.out.println("Value of i:" + i);
    }

<强>输出:

0
Value of i:0
1
Value of i:1
2
Value of i:2

<强>问题: 那么为什么在System.out.println(i=i++);之后,i的值不会增加?

答案:这是因为i++表示后期增量。右侧的i 在该行后增加一个

//Let say i is 0.
i = i++; 

i ++表示右手边i仍然为0,直到它进入下一行。因此,0被分配给左侧的i

答案 4 :(得分:0)

如果有效:。

for(int i=0;i<=2;i++)
{
    System.out.println(i=++i);
} 

因为这不起作用?:

for(int i=0;i<=2;i++)
{
    System.out.println(i=i++);
} 

显然println方法中的后增量被区别对待。

答案 5 :(得分:0)

请参阅此片段:

for (int i=0; i<=2;i+=2){
        System.out.println("i= "+ i);
    }

这应该给你一个简短的方法。

答案 6 :(得分:0)

如果您编写:

,则在C或C ++中是未定义的行为
SELECT * FROM table WHERE a IN (0,1)

原因是无法确定评估顺序。因此,如果用C或C ++编写,则无法保证将生成什么。

Java 中,从设计中删除了这种歧义。评估顺序如下:

i = i++;