黑马程序员技术交流社区

标题: 有关i++问题 [打印本页]

作者: 朱志群    时间: 2013-7-23 18:02
标题: 有关i++问题
本帖最后由 尹桥印 于 2013-7-23 18:47 编辑
  1. public class Er3_1 {
  2. public static void main(String[] args)
  3. {
  4. int A = 15;
  5. int i=0;
  6. while(A<50)
  7. {
  8. A=A+5;
  9. i=i++;
  10. }
  11. System.out.print(i);
  12. }
  13. }
复制代码
编译没错为什么算出来为0呢

作者: HEIMA时光    时间: 2013-7-23 18:22
为什么不写成i=i+1呢?
作者: HEIMA时光    时间: 2013-7-23 18:25
本帖最后由 HEIMA时光 于 2013-7-23 18:32 编辑

那个执行的打印语句没有放在while循环的内部,即便是经过几次循环,打印的i还是最初的值!

i=i++;表示的是i将0赋值给i,之后再自增一次。
如果是i=++i,就表示i先自增一次,让后将自增后的值赋值给i.


int  a  = 0;
b=a++;结果是  a=1,b=0;
b=++a;结果是 a=1,b=1;


作者: 刘张朋    时间: 2013-7-23 18:48
我觉得 i=i++; 的原理是,先将 i 的初始值赋值给 i ,然后将 i+1 的值进行缓存,所以每次i得到的始终是它的初始值,但是 i = ++i;不一样他是先将 i+1 ,然后再重新赋值给 i ,不是因为将输出语句写到while语句外面了,不信你可以将 i=i++; 直接写成 i++; 或者 i=++i;试一下
作者: Angel♥儱唲    时间: 2013-7-23 18:52
我觉得你这里应该是在验证i++和++i的区别对吧,不过你还是用变量i来接收的数据就错在这里了,i=++i的时候是正确的,换成i=i++就错误了。如果你重新定义一个变量来接收这个值就不会存在这个问题了。或者级直接写i++和++1就好啊。
这里的问题我自己认为是i这个变量的先自增和后自增产生的,i=++i的时候,i先自增然后赋值给i,i的数据是变化的自增的,结果正确。但当i=i++的时候,第一步就是i先把0赋值给了i,然后i在自增,就在这里我觉得第二步的i自增没有意义了,因为你已经把0给了i,这个i就是下一次循环时的那个自增的i了,这就导致每一次都i把0赋值给i,这是我自己理解的啊,前辈们千万别喷我,刚刚学习菜鸟一个哈,说实话我自己都觉得晕
作者: xscn    时间: 2013-7-23 18:58
HEIMA时光 发表于 2013-7-23 18:25
那个执行的打印语句没有放在while循环的内部,即便是经过几次循环,打印的i还是最初的值!

i=i++;表示的是 ...

不是没参与循环的。
  1. public class Er3_1 {
  2.         public static void main(String[] args){   
  3.                 int A = 15;  
  4.                 int i=0;
  5.                 while(A<50)
  6.                         {  
  7.                         A=A+5;   
  8.                         i=i++;
  9.                         //i++;都试一下就发现区别了
  10.                         }  
  11.                        
  12.                         System.out.print(i);
  13. }
  14.                        
  15. }
复制代码
Java在执行 (变量=i++)的时候;在执行变量赋值语句之前,会先把i的值找个地方保存起来,然后直接在i变量的空间内对值+1,然后再把刚才保存起来的那个值赋给变量。

作者: Joesph    时间: 2013-7-23 19:00
i=i++和i=++i不一样的,i=i++,是右边i先赋值给左边i,然后右边i自增;i=++i,是右边i先自增,然后赋值给左边i.
  你把i=i++改为 i=++i ,或 i++ 或 i+=1 或 i=i+1  都可以的。
作者: yinjiek    时间: 2013-7-23 19:14
02.public static void main(String[] args)

03.{

04.int A = 15;

05.int i=0;

06.while(A<50)

07.{

08.A=A+5;

09.i=i++;

10.}

i=i++;
  System.out.print(i);
结果为0是因为++在循环完之后进入第二次循环再++的,所以打印出来还是0;如果++在前面结果就是1了!
作者: 小时晚er    时间: 2013-7-26 15:36
i=i++,是先进行赋值在自身加1,++i是先加一后再进行赋值,所以,如果在循环内你写的是i=i++,那么它怎么循环结果都是0,
作者: Mr_Free    时间: 2013-7-27 20:46
a=a++ ;这里面的过程是右边a的值先赋值给左边的a,然后再运算a+1;但是你 a只做了a+1的运算,并没有赋值给a。进入下一次循环的时候a又是0;


作者: 狼牙    时间: 2013-7-29 09:59
i=i++;表示的是i将0赋值给i,之后再自增一次。
把代码改成这样应该就可以啦!
  1. public class TryTest {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args)
  6.         {
  7.                 int a=15;
  8.                 int i=0;
  9.                 while(a<50)
  10.                 {
  11.                         a=a+5;
  12.                         i=i++;
  13.                 }
  14.                 System.out.println(i);
  15.         }
  16. }
复制代码
我想这个才是你想要的结果吧?共同学习!共同进步!
作者: 小罴孩    时间: 2013-7-29 11:26
i=i++;这句意思是先把 等号后面的 i(此时为0) 值赋值给等号前面的 i ,等号后面的 i 在自增,因为在每次循环后等号前面的 i 都为0,所有结果输出为0.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2