Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java for循环输出 import java.io.*; 公开课考试{ 公共静态void main(字符串参数[]){ int a=0,b=6,和; 对于代码中的(int i=0;i_Java_Loops_For Loop_Conditional Statements_Increment - Fatal编程技术网

Java for循环输出 import java.io.*; 公开课考试{ 公共静态void main(字符串参数[]){ int a=0,b=6,和; 对于代码中的(int i=0;i

Java for循环输出 import java.io.*; 公开课考试{ 公共静态void main(字符串参数[]){ int a=0,b=6,和; 对于代码中的(int i=0;i,java,loops,for-loop,conditional-statements,increment,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++); } } } 这里有一个相关的线程可以帮助您:区别在于这行代码: for(int i=0;i<

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++);
        }
    }
}

这里有一个相关的线程可以帮助您:

区别在于这行代码:

for(int i=0;i<=2;i++)
{
   System.out.println(i=++i);  
}
i++是一个后增量,这意味着它只在语句的其余部分之后执行

所以,它有点像这样:

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

最后,您将打印i的值,而在此之后不会使用tempI的值,因此被认为已丢失。

即使不使用调试器,您也可以轻松地自己测试它

System.out.println(
  int tempI = i;
  i = tempI;
  tempI = i + 1;
  );
问题: 那么为什么在
System.out.println(i=i++);
之后,
i
的值没有增加呢

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

0
Value of i:0
1
Value of i:1
2
Value of i:2
i++表示在进入下一行之前,右侧的
i
仍将是0。因此,0被分配给左侧的
i

如果有效:

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

有关(int i=0;i的信息,请参见以下代码片段:

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

< int >=0;i如果C写或C++,则是未定义的行为:
for (int i=0; i<=2;i+=2){
        System.out.println("i= "+ i);
    }
原因是评估的顺序不能确定。因此,如果你用C或C++写这个,就不能保证会产生什么。 在Java中,这种模糊性从设计中去除。评估顺序如下:

i = i++;

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

i = i++;    //value of i++ is stored (0 is stored in this case)
            //i increased by 1, i is now 1
            //The stored value assigned back to i (0 assigned to i)

你将i增加两倍,只需打印System.out.println(i);在这里工作i++是在将i分配给i之后执行的,因此增广会丢失。
i=i++
的分配基本上与
i=i
@Karbos是的,她知道。她问为什么它不会增加两次。这是错误的解释。你能尝试执行这个
{i=i++;System.out.println吗(i) }
?Suresh:还是一样。只是,在到达print语句之前,i将被扩充。我使用tempI作为逻辑示例,而不是实际代码的示例。然后在SOP中(i=i++),i的值应该在这一行之后增加。所以在编译器打印这一行之后,它会转到for循环增量,所以这里的“i”一定会增加它,对吗?然后,我再次在for循环中增加它,所以基本上它会增加两次,我猜。@Ashley您的语句只有在RHS上使用不同的变量时才是真的。例如:
i+b++
。然后打印
b
,它将为您提供7。但是如果在LHS和RHS上使用相同的变量(即
i=i++
)之后,C++就被忽略了。这就是java如何设计用于后增量的。不同于C++。艾希礼看一下,这个解决方案应该是你所要找的。谢谢,这很有意义。好日子(Y)@ashley如果我的解决方案解决了您的问题,您可以通过单击我答案旁边的勾号来接受我的解决方案。如果您还有更多问题,请告诉我;)
for (int i=0; i<=2;i+=2){
        System.out.println("i= "+ i);
    }
i = i++;
i = i++;    //value of i++ is stored (0 is stored in this case)
            //i increased by 1, i is now 1
            //The stored value assigned back to i (0 assigned to 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