4-4第三题if(!(i>j)||m<k++)这个判断式

4-4第三题if(!(i>j)||m<k++)这个判断式

4-4第三题if(!(i>j)||m<k++)这个判断式难道不应该是i>j结果为true之后就短路取反走else吗,为啥结果是c呢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
qq_Hai_3 2018-04-21 16:01:42

因为是或运算符 所以前面为0 还要判断后面是否为0,题中m<k++ 也为0,这里的k自增1 k=7,再执行else语句 "k++" 所以k=8

木木灬菌 2018-04-20 22:14:47

&&只有在(False)&&(ANY)的情况下会短路;

|| 只有在(True)||(ANY)的情况下才会短路;

这个题前面的“!(i>j)”结果是False,当然不会短路。


范蠡 2018-04-20 13:15:38

!的优先级比||高,所以优先运算,!(i>j)为false,  m<k++为false,所以运算else后的语句块。

FAMI 2018-04-16 16:47:24

由于“或”运算符的左侧(i<j)为ture所以取反之后得到false,必须进行右侧运算。右侧运算之后得到依旧是false,同时进行了“k++”运算,此时k=7。

“或”运算结束得到的是false,所以要走else分支,再次进行“k++”运算。

最终得到k=8

好帮手慕阿莹 2018-04-12 12:00:15

i>j 为true  取反后为false,||的意思是表示如果第一个左边的表达式为true,直接就略过右边的表达式,但这个左边的表达式为false,所以它还要判断右边的表达式,于是右边的表达式也执行了,最后都为false ,所以才会走else。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 还有一点不明白。 int i =9,j=8,k=6,m=10; if(!(i<=j||m<=k++)){ k--; }else { k++; }System.out.println(k); 结果为6, i<j 为false 取反后为true 不是左边为true就略过右边表达方式吗?
    2018-06-02 23:23:42
  • 同学你可以看一下 if( ! (i<=j||m<=k++) ) 中 i<=j||m<=k++ 在一个大括号里的, 也就是要先判断括号里整体的内容,再取反。 i<=j||m<=k++ 中 i<=j 为false,所以才会继续走 m<=k++ 这个表达式。
    2018-06-04 09:41:59
  • 明白,谢谢!
    2018-06-04 09:43:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师