问题描述
小弟刚刚开始学习Java现在遇到一道题不知道何解先来求助各位大大恳请各位帮忙解释一下求下面程序的运行结果publicclasstest{publicstaticvoidmain(Stringargs[]){intx=0;inty=0;for(intk=0;k<5;k++){if((++x>2)||(++y>2)){x++;}}System.out.println(x+"and"+y);}}答案是8and2但是我不明白为什么有哪位大大能够给我仔细的解释一下我知道程序要做5次循环第一次循环结束值为1and1第二次结束为2and2但是第三次开始就变为4and2从第三次开始++y就不起作用了一样我不明白为什么我想的答案应该是8and5能告诉我为什么++y不作为了呢谢谢
解决方案
解决方案二:
直接在x++后面加一个打印语句,不就能看到这是怎么运行了的嘛
解决方案三:
publicclasstest{publicstaticvoidmain(Stringargs[]){intx=0;inty=0;for(intk=0;k<5;k++){if((++x>2)||(++y>2)){x++;System.out.println(x+"and"+y);}}System.out.println(x+"and"+y);}}
顶楼上的,自己运行一下就知道了
解决方案四:
我加了所以我才知道每一次循环的输出结果但是不明白为什么会是这个结果你能帮我解释一下吗
解决方案五:
if((++x>2)||(++y>2))当(++x>2)为true时,就会往下执行++x;而不再判断(++y)>2,第三次根本就不会执行++y
解决方案六:
||运算符不是要比较运算符两边的数值吗然后得出true或是false那样的话++y还是执行了的啊
解决方案七:
我个人感觉4楼说得很对。
解决方案八:
在第三次循环执行,此时,x=2,y=2,执行时编译系统只执行到(++x>2)成立,因为是或关系,后者(++y)>2无需执行.就可以确定,所以是8and2
解决方案九:
x||y;如果x为真,就不会去判断y了。x&&y;如果x为假,也不会去判断y了。
解决方案十:
||只要一边为true了,整个就为true,就不用执行后面的了。
解决方案十一:
这种问题基础书上都有讲的哦
解决方案十二:
引用5楼blue_sky_flying的回复:
||运算符不是要比较运算符两边的数值吗然后得出true或是false那样的话++y还是执行了的啊
逻辑运算符是短路的对于||前面的条件为true,整个表达式就肯定是true,所以就没必要继续执行后面的判断对于&&如果前面是false,整个表达式肯定是false,后面也不会执行
解决方案十三:
if((++x>2)||(++y>2))当x=2时++x>2为true||当第一个条件为真时,就不会去判断第二个条件了所以++y并没有执行最后y还是2
解决方案十四:
当k=0时,x=1,y=1;当k=1时,x=2,y=2;当k=2时,x=4,y=2;当k=3时,x=6,y=2;当k=4时,x=8,y=2;当k=5时不进入循环其实说白了就是“||”这个逻辑运算符的问题如果前面满足要求后面的久不判断后面y没有加了如果前面不满足要求后面的接着判断所以前面y加了两次
解决方案十五:
if((++x>2)||(++y>2))当前面为true后面就不执行了
解决方案:
我明白了谢谢各位大大真心感谢
解决方案:
引用11楼cooler4k的回复:
引用5楼blue_sky_flying的回复:||运算符不是要比较运算符两边的数值吗然后得出true或是false那样的话++y还是执行了的啊逻辑运算符是短路的对于||前面的条件为true,整个表达式就肯定是true,所以就没必要继续执行后面的判断对于&&如果前面是false,整个表达式肯定是false,后面也不会执行
已经很详细了就是这样的
解决方案:
我这里还有另一个问题不知道哪位大大能够再辛苦一下帮我解释一下求下面程序的运行结果publicclassHello{publicstaticvoidmain(Stringargs[]){booleanb1=true;booleanb2=false;booleanb3=true;if(b1&b2|b2&b3|b2|b3){System.out.println("aaa");}if(b1&b3|b2&b3|b2|b3){System.out.println("bbb");}}}答案是aaabbb但是我不明白为什么
解决方案:
以第一个为例子:booleanb1=true;booleanb2=false;booleanb3=true;b1&b2|b2&b3|b2|b3-->true&false|false&true|false|false&和|运算级别是一样的,像加减一样逐步算,最后得到true
解决方案:
13楼说的对哦