黑马程序员技术交流社区

标题: 大家帮忙解题 [打印本页]

作者: 随性自然    时间: 2017-3-10 11:47
标题: 大家帮忙解题
今天看了一道题,解出来的答案和给的答案不一样,但是找不到自己错哪了?大神帮忙看看。


作者: ApePlanet    时间: 2017-3-10 11:52
你也没说你想要什么答案啊……

作者: 随性自然    时间: 2017-3-10 11:55
ApePlanet 发表于 2017-3-10 11:52
你也没说你想要什么答案啊……

我做出来的答案是5,但系统给的答案是6,不好意思,忘记写答案了

作者: anyupeng    时间: 2017-3-10 12:18
答案就是6,因为你的i++没带大括号,不算是if语句的,条件判断玩依然会执行,应该是这样的

作者: 随性自然    时间: 2017-3-10 12:49
anyupeng 发表于 2017-3-10 12:18
答案就是6,因为你的i++没带大括号,不算是if语句的,条件判断玩依然会执行,应该是这样的
...

我加了大括号答案还是6,你看if语句后面没有分号,说明i++本来就是if语句一体的,跟大括号无关!

作者: 天涯丿过客    时间: 2017-3-10 13:04
不管你加不加大括号,条件为ture,语句就会执行,第一个if里,你是把stste赋值给了ture,所以该if为ture,加大括号,if值也会执行

作者: 随性自然    时间: 2017-3-10 13:20
天涯丿过客 发表于 2017-3-10 13:04
不管你加不加大括号,条件为ture,语句就会执行,第一个if里,你是把stste赋值给了ture,所以该if为ture, ...

前面已经定义了state是错的,判断肯定也是错的,怎么还会重新赋值呢?

作者: anyupeng    时间: 2017-3-10 13:30
如果用if  else呢

作者: xiaoxiaoyuxie    时间: 2017-3-10 14:38
要知道你的判断条件是 state=true ,是一个赋值语句,并不是 state==true 的判断语句, 当然会返回true,这道题考的是细心,要放到工作中这种问题可能耗费你一整天时间,别问我为什么知道
作者: 随性自然    时间: 2017-3-10 14:52
xiaoxiaoyuxie 发表于 2017-3-10 14:38
要知道你的判断条件是 state=true ,是一个赋值语句,并不是 state==true 的判断语句, 当然会返回true,这道题 ...

太对了,真是一语点醒梦中人啊!太感谢你了!

作者: 海天酱油    时间: 2017-3-11 00:12
学习了,真是长知识

作者: mrwalker    时间: 2017-3-11 10:09
if((++i > 2) && (state == true)) 跟 if((++i > 4) || (state == false)) 就算你改成了判断语句,最终结果也是6. && 跟 || 具有短路效果。
作者: 随性自然    时间: 2017-3-11 11:58
mrwalker 发表于 2017-3-11 10:09
if((++i > 2) && (state == true)) 跟 if((++i > 4) || (state == false)) 就算你改成了判断语句,最终结果 ...

你意思后面state不用判断吗?短路不是这样的吧!

作者: 随性自然    时间: 2017-3-11 21:43
mrwalker 发表于 2017-3-11 10:09
if((++i > 2) && (state == true)) 跟 if((++i > 4) || (state == false)) 就算你改成了判断语句,最终结果 ...

我在电脑上测试了你的方法,答案是5。你自己再看看

作者: xiaoxipeng    时间: 2017-3-11 22:51
states==false
作者: mrwalker    时间: 2017-3-12 07:43
随性自然 发表于 2017-3-11 21:43
我在电脑上测试了你的方法,答案是5。你自己再看看

不好意思,是我搞错了。(++i > 2) && (state == true),只有(++i > 2) 为false时,(state == true)这个才不会执行。&& 跟 || 有短路效果,这个是没错的
作者: newu    时间: 2017-3-12 09:33
学习了,真是长知识
作者: 迷途的羊    时间: 2017-3-12 11:54
受教了.以后真得小心了,要不一个小小的问题得浪费半天时间 .
作者: 随性自然    时间: 2017-3-12 12:21
mrwalker 发表于 2017-3-12 07:43
不好意思,是我搞错了。(++i > 2) && (state == true),只有(++i > 2) 为false时,(state == true)这个才 ...

且只有第一个假才有短路,或只有第一个真才有短路,并不是任何时候都有短路效果,这样才是深刻理解。

作者: 小T    时间: 2017-3-13 08:32
可能你的是假电脑,我的运行就是6

作者: lvshen9    时间: 2017-3-13 11:00
小T 发表于 2017-3-13 08:32
可能你的是假电脑,我的运行就是6

s=true与s==true有区别吧
作者: 愤怒的大飞机    时间: 2017-3-13 11:38
就是6啊,注意=与==的区别,=是赋值

作者: 小T    时间: 2017-3-14 02:01
lvshen9 发表于 2017-3-13 11:00
s=true与s==true有区别吧

肯定啊,一个赋值一个判断,不过赋值放在那里eclipse理解为里面的值 打印下就知道了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2