问题描述
问题1:publicclassTest{publicstaticvoidmain(String[]args){inta=2;System.out.println(a+3*a++);}}结果是8!不是9,求解!问题2:如果实现整形运算的四舍五入?请各位帮忙!
解决方案
解决方案二:
首先3*a=6然后6+2=8第二个问题我可能不太明白,整形运算怎么能四舍五入呢,没有小数点
解决方案三:
a=23*a=62+6=8a++-->a=3
解决方案四:
问题1:a+3*a++执行过程是:2+3*2++,按照运算规制是:先做3*2,然后a变为3,最后2+6=8。问题2:整形运算没有四舍五入,只有小数有。
解决方案五:
System.out.println(3*a+++a);结果是9,只是调换了a的位置。。。。why?
解决方案六:
3*a++=6此时a=36+a=6+3=9
解决方案七:
++a是先加1再取值a++是先取值後加1用一個取出值和現值來判斷就行a=22+3*2(a變成3)==8a=23*a+++a==>3*2(a變成3)+3==9floatf=0.5F;(int)f+(int)(2*f%2)=1;
解决方案八:
1st这个是考察的运算符的优先级,LZ看好就是了。2ndjava语言的强制转换不是数学上的4舍5入。真要实现的话,自己封装个函数,在里面根据小数位的值进行判断就是了。
解决方案九:
运算符优先级。。
解决方案十:
引用4楼oneluckyfish的回复:
System.out.println(3*a+++a);结果是9,只是调换了a的位置。。。。why?
这个顺序变化后结果是不相同的:3*a+++a这个表达式中先做3*a++得到6,完了后a变成了3,这时后面的a已经被更新为3,所以得到9;a+3*a++这个表达式中a刚开始都被初始化为2了(即使先执行3*a++也不会回过来更新前面的a),所以其实是2+6=8;执行完了后a才变为3了。四舍五入可以借助Bigdecimal解决,里面有好几种模式就包括四舍五入的。记不大清楚了,楼主可以自己查查api。。
解决方案十一:
一.2+3*2++=8二.NULL
解决方案十二:
9楼的好像是对的
解决方案十三:
9楼正解.
解决方案十四:
a++是运算完,a再加加。。。四舍五入用Math.roandom();
解决方案十五:
学习了。
解决方案:
九楼正解。。。
解决方案:
对于++a与a++可以这样简单的说,假设a=1,如果后面使用++a时,并且是第一次使用时,这是先将a的值加1,再使用。对于a++可以这样理解,如果后面使用a++时,并且是第一次使用时,这时a还是原来的值,但第二次再用到a时,这时就要将a的值先加1再使用。我所说的,你理解了,你就知道你写的程序的值为什么是8而不是9了……
解决方案:
必须的是8a+3*a++中最先执行的是++运算符而a++说明是先使用a在+1所以a+3*a++=2+3*2=8
解决方案:
同意13楼得..
解决方案:
比如a=2;i=a++;i的结果就是2因为++在后先把a的值赋给i然后a自己才开始++如果i=++a;i的结果就是3因为++在前先把a++了以后才赋值给i
解决方案:
引用9楼gray_sky的回复:
引用4楼oneluckyfish的回复:System.out.println(3*a+++a);结果是9,只是调换了a的位置。。。。why?这个顺序变化后结果是不相同的:3*a+++a这个表达式中先做3*a++得到6,完了后a变成了3,这时后面的a已经被更新为3,所以得到9;a+3*a++这个表达式中a刚开始都被初始化为2了(即使先执行……
同意,这个主要是运算符的顺序