黑马程序员技术交流社区

标题: 貌似简单,但答案有点不靠谱的循环操作? [打印本页]

作者: 孔斌    时间: 2013-1-28 13:13
标题: 貌似简单,但答案有点不靠谱的循环操作?
  1. public class Test1 {

  2.         /**
  3.          * 循环的问题
  4.          */
  5.         public static void main(String args[]){
  6.                 int j = 0;
  7.                 for(int i = 0; i < 100;i++){
  8.                         j = j++;
  9.                 }
  10.                 System.out.println(j);
  11.         }
  12. }
复制代码
打印结果竟然是0,这是为什么呢?
作者: Gaara    时间: 2013-1-28 13:34
你把j=j++;  改成j++;   结果应该就是100     
作者: 黑马张英涛    时间: 2013-1-28 13:35
当第一次执行到j++时,取的是j的值,然后再给j加1,
也就是说第一次执行j++时,表达式的值是0,
但是你却把0又赋给了j,到下一次循环时,j的值还是0,
你还是把0赋给j,所以j始终是0
改成j=++j就可以了

作者: Gaara    时间: 2013-1-28 14:04
我这个不对吗??
作者: 打工人    时间: 2013-1-28 14:11
张文彬 发表于 2013-1-28 14:04
我这个不对吗??

     对!
作者: 姚永生    时间: 2013-1-28 14:26
这个结果说明:j=j++;这一语句的真实运行过程应该是这样的:
第一步,等号后的j作为一个单独的表达式进行运算,得出结果为0,单独存储。
第二步,进行j++运算,使j的结果为1。
第三步,将第一步的表达式的值赋给j,得出结果为0。
作者: Gaara    时间: 2013-1-28 14:32
冯海霞 发表于 2013-1-28 14:11
对!

。。。。。为什么我没有技术分啊  新手拿技术分很难的版主:'(:'(
作者: 贾文泽    时间: 2013-1-28 14:43
x= j++  ;    //这句话的意思是   x = j ;  j=j+1 ;
x= ++j ;    //这句话的意思是    j=j+1;  x=j;

你的代码中
j=0;    j=j++;     那 j 永远是 0;

作者: Gaara    时间: 2013-1-28 14:59
张文彬 发表于 2013-1-28 14:32
。。。。。为什么我没有技术分啊  新手拿技术分很难的版主

哦  明白了  谢谢啊  我会努力的
作者: 张敬培    时间: 2013-1-28 16:26
在这要分清楚j++和++j的区别,
先加加就是数据先进行运算,然后赋值;
后加加是先赋值后预算。
j=j++;是首先把0赋值给了j,然后再加加,这样j的值还是0,所以你循环多少次都不会改变
j=++j;是首先对j进行++,这样第一次赋值就把运算后的j=1;赋值给了j;等到第二次运算时,就会从1的上面进行++;这样就会到达你要的结果了。

关于数据的自增和自减,我们只需要记住:++在前,数据先进行运算,然后再赋值;++在后,是先赋值,在运算。只要记住这个那么自增自减就没有那么难了。





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