2 qq 34193086 qq_34193086 于 2016.03.26 17:08 提问

循环问题,关于后++的问题

int j=0;
for(int i=0;i<100;i++){
j=j++;
}
System.out.println(j);
为什么输出的j是0而不是100呢

8个回答

Alisawxn
Alisawxn   2016.03.26 17:25

因为后++是先取值,后+1,即你的j先取了0,后+1,虽然你的J+1了但是你没取啊,下次循环的时候j=0依旧。。。。

bianfeiniao
bianfeiniao   2016.03.26 17:25

问题出在j=j++这一句,
首先说一下a++与++a运算符区别,
a++,这个表达式的作用是先返回a的值,再将a++
而++a,这个表达式的作用是先将a++,在返回a的值,
也就是说

a=0;b=a++;执行这两句后,b=a的值(0),在将a++,即a的值为1,b的值为0
a=0;b=++a;执行这两句后,先将a++,再b=a的值(1),即a的值为1,b的值也为1

通常,可以这样记
a++,a在前面,所以先返回是原来a的值,在做+法。

++a,++在前面,所以先做加法,在返回值是原来a的值+1.

那么j=0;j=j++;最终的结果是
j=0; ==> j = 0;
j = j++; ==>先执行j++;j=1,但该表达式返回值为0
在执行赋值:j=j++,因为j++表达式的返回值为0,所以执行完后j=0;
最终不管循环多少次,j始终为0.

把for一句改为:for(i=0;i<100;i++){ j=++j; } ,你可能能得到你想要的结果。

qq423399099
qq423399099   Ds   Rxr 2016.03.26 17:22

相当奇怪啊,楼主代码截个图看看,是不是漏了啥

qq423399099
qq423399099 回复qq_34193086: 楼主应该跟我想的是一样的,先取出值,然后=赋值,最后才对j++
一年多之前 回复
qq423399099
qq423399099 回复qq_34193086: 哈哈,我没用JAVA编译,我用C编译打印出来就是100,所以关键问题在于是执行的一个顺序(是先取出了j原来的值,然后再++,虽然此时j=1了,但是最后又执行了=赋值操作,所以j又被赋值成0了)
一年多之前 回复
qq_34193086
qq_34193086 没漏,就是没想通为啥第二次循环的时候不是1++,二楼说的问题改成j=++j输出100我能理解,就是没理解这个为什么输出0
一年多之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.03.26 17:57

本来j++执行后j会为1的,,但是你又赋值给j,,所以j还是0,,,,所以无论多少次j依旧是0,,你直接j++就行了,,不要赋值了

sinat_34437135
sinat_34437135   2016.03.26 18:28

是先取值后++的,这里j没有取到

qq_30607881
qq_30607881   2016.03.26 20:07

是先取值运算后进行++运算

njzyydx
njzyydx   2016.03.26 20:53

既然是先取值运算,后进行++运算,j在后++运算中不就被赋值为1了么

CSDNXIAOD
CSDNXIAOD   2016.03.30 11:25

python 导入循环问题
PAT 1008 数组元素循环右移问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!