当前位置: 代码迷 >> J2SE >> 各位前辈麻烦你们班小弟我看看这是为什么
  详细解决方案

各位前辈麻烦你们班小弟我看看这是为什么

热度:3290   发布时间:2013-02-25 00:00:00.0
各位前辈麻烦你们班我看看这是为什么?
Java code
int i = 2;        i += i-=i*i;        System.out.println(i);
这个结果为什么是0而不是-4;

Java code
    do        {            i--;            System.out.println(i);                        continue;                            }        while(i>0);
这个里面的continue后面加上语句就报错这是为什么?我用debug跟这个程序他好像不会执行到continue这一句

------解决方案--------------------------------------------------------
第一个:java里面好像不可以用连=(a=b=c这个在java里面是不允许的)
第二个:continue结束本次循环,本次循环都结束了,后面的语句当然就不在执行了,加了没什么用。
 do
{
i--;
System.out.println(i);

continue;

这里的语句在循环中,不在执行。
}

------解决方案--------------------------------------------------------
探讨
Java code

int i = 2;
i += i-=i*i;
System.out.println(i);
这个结果为什么是0而不是-4;

------解决方案--------------------------------------------------------
i += i-=i*i; 
从右向左,
i+= i-=4;
i+= 0;
i=0;

2.continue下面的语句永远不会被执行到,所以报错

------解决方案--------------------------------------------------------
第一个也不难啊
计算机室从前往后算,但是赋值是从后往前的
i*i=4,i=i-4=-2,i=i+(-2)=0
------解决方案--------------------------------------------------------
对于第一个问题,我想说的是实际中不会这样写,可读性不强,太繁琐,第一个语句从右到左依次运算就可以得到结果0;
对于第二个问题,continue跳出当前循环的操作 ,继续执行这个循环的下个操作,后面语句都不会执行,所以continue后面的代码就是unreachable code,以后遇到报错要看看是什么类型的错误,这才是好的习惯
------解决方案--------------------------------------------------------
程序在初始化的时候,虚拟机就把压了4个2到栈里,所以后面的是不会再把i赋其他值的。
  相关解决方案