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++
2 年多之前 回复
qq423399099
qq423399099 回复qq_34193086: 哈哈,我没用JAVA编译,我用C编译打印出来就是100,所以关键问题在于是执行的一个顺序(是先取出了j原来的值,然后再++,虽然此时j=1了,但是最后又执行了=赋值操作,所以j又被赋值成0了)
2 年多之前 回复
qq_34193086
qq_34193086 没漏,就是没想通为啥第二次循环的时候不是1++,二楼说的问题改成j=++j输出100我能理解,就是没理解这个为什么输出0
2 年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
for循环效率问题
下面哪种写法循环语句的效率最高?
数组在for循环中使用splice方法导致索引错乱的问题
数组的方法基本简介在开发程序的过程中,我们经常使用数组和它的相关方法。就如追加元素push()方法在首部添加元素的unshift()方法还有删除最后一个元素的方法pop()方法....有很多,我就不一一列举了,其实我觉得不用记的,有一个印象就行,用法这些有印象开发的时候记不住就翻技术手册或者找度娘,我们要始终遵循一条宗旨:开发要把精力全部放在创造上,这些鸡皮蒜事有时候记得很容易混淆,也很杂我这里要...
C++:关于while(cin>>str)无法结束的问题
在C++ Primer中,作者经常使用while(cin>>word)类似的语法,但是如何结束,可能会出现疑惑。有的时候需要两次快捷键才能结束循环,有的时候却只需要一次循环。 在 Unix 系统中的实际的现象为: * 当输入为“字符串,回车,Ctrl+D”的时候,跳出循环; * 当输入为“字符串,Ctrl+D,回车”的时候,不会跳出循环; * 当输入为“字符串,Ctrl+D,回车,Ctrl
解决 Ubuntu 登陆界面无限循环 的问题
现象:在Ubuntu登陆界面输入密码之后,黑屏一闪并且出现了check battery state之类的文字之后,又跳转到登录界面。 原因:主目录下的.Xauthority文件拥有者变成了root,从而以用户登陆的时候无法都取.Xauthority文件。 说明:Xauthority,是startx脚本记录文件。Xserver启动时,读文件~/.Xauthority,读入对应其displ
c课件 关于循环控制 有关for,while循环的问题
c语言基础教程,关于循环控制。有关for,while循环的问题。
关于执行两个for循环效率注意点
问题: for(i=0;i for(j=0;j {} for(j=0;j for(i=0;i {} 这两个程序哪个执行效率高? 解答: for(i=0;i for(j=0;j {} 效率高 双层循环,较长的循环放在内层效率要高 for(j=0;j for(i=0;i {} 这样内层循环要构造100次,所以频繁的在循
急急急!!!关于用循环输出ArrayList中对象问题
我从数据库中搜索出几条记录存在ArrayList中,再用输出时页面重复显示最后一条记录,请问是哪有毛病啊,记录数目与从数据库中取出是一样的, 有点乱,大家帮帮忙吧? 只有页面体部分,我是实在找不到哪有问题,我在action中检索 记录存放在ArrayList,并将它设置为session属性,下面是forword页面 商品搜索结果: 总共有:${fn:length (prod
position层级问题
如何让黑色的弹层置于弹窗的最上层? 黑色的背景与弹窗是相对于body定位, 而弹层是相对于弹窗定位, 无论怎样改变弹层的z-index值都不能改变其相对于弹窗定位的事实, 所以, 应先让弹层相对于body定位,即,position可写为fixed, 然后动态获取left,top值,就可以完美的解决这个问题。 以下为例子: $('.showS
百钱买百鸡问题
百钱买百鸡问题,对于这个问题实际上可以不用三重循环,而是用二重循环,因为公鸡和母鸡数确定后,小鸡数就定了。
for循环用效率分析(++和--时效率的差异分析)
(听别人说的面试中问过的一个问题,记不清了,如有偏差希望大家补充纠正) 问题:完成相同的功能,for循环使用++和–哪个效率更高? 通常我们在编写需要for循环实现的程序时有两种实现方法: for(int i = 0;i<arr.length;i++) for(int i = arr.length-1;i>=0;i--) 分析: 结论:通常来讲第2种用–的方法效率更高 原因如下: