我觉得老师这个菜品查询代码是不是有些问题

我觉得老师这个菜品查询代码是不是有些问题

老师用的是

if (food.getPrice() < mPrice &&
(food.isHot() == mIsHot || food.isFish() == mIsFish || food.isSour() == mIsSour)
)

问题就在于如果使用短路或来判断的话,如果三个CheckBox都不选呢,只要其中一个条件满足,这个if判断同样成立,那这里这个判断语句就毫无意义了,也就是说,我不选择任何一个口味,只是拖动seekbar进度条同样可以查询到菜品,我觉得这样很不合理

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

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

1回答
LovelyChubby 2021-05-10 11:13:33

如果三个CheckBox都不选。

那么下面这个表达式的结果就是:false

(food.isHot() == mIsHot || food.isFish() == mIsFish || food.isSour() == mIsSour)

那么判断语句可以简化成下面

if (food.getPrice() < mPrice && false)

此时 if判断无论如何都是不成立的啊

  • 提问者 Mitsushima_Hikari #1

    老师,可能是我说的不是很清楚,我的意思是,如果现在我三个CheckBox都不选,那么在这个表达式下

    (food.isHot() == mIsHot || food.isFish() == mIsFish || food.isSour() == mIsSour)

    会出现这样的情况,假设我现在有道菜只是辣的,不是海鲜,也不是酸的口味

    ---------------------------------------------------------------------------

    此时isHot=true;mIsHot由于CheckBox未选中状态所以为false;所以第一个条件为false;


    但是!由于我这道菜只是辣的,所以isFiash=false;mIsFish同样由于checkBox未选中状态同样为false;就变成了false==flase  那么这个逻辑运算就成立,为true了!


    最后由于短路或的特性,只要一个满足这个等式就成立,最终还是会走到

    mFoodResult.add(food);

    ​这一步,把菜品结果添加到集合中。


    这样的结果是什么呢?我本意是想查询的是三个口味都不具备的菜品,结果却查出了,海鲜和酸的菜品,因为这两个判断都为true,直接回被加到集合中


    所以我觉得这个代码不合理,是不是有点问题,请老师指教,应该如何修改可以实现我说的这个场景

    2021-05-10 22:14:57
  • 提问者 Mitsushima_Hikari #2

    老师,可能是我说的不是很清楚,我的意思是,如果现在我三个CheckBox都不选,那么在这个表达式下

    (food.isHot() == mIsHot || food.isFish() == mIsFish || food.isSour() == mIsSour)

    会出现这样的情况,假设我现在有道菜只是辣的,不是海鲜,也不是酸的口味

    ---------------------------------------------------------------------------

    此时isHot=true;mIsHot由于CheckBox未选中状态所以为false;所以第一个条件为false;


    但是!由于我这道菜只是辣的,所以isFiash=false;mIsFish同样由于checkBox未选中状态同样为false;就变成了false==flase  那么这个逻辑运算就成立,为true了!


    最后由于短路或的特性,只要一个满足这个等式就成立,最终还是会走到

    mFoodResult.add(food);

    这一步,把菜品结果添加到集合中。


    这样的结果是什么呢?我本意是想查询的是三个口味都不具备的菜品,结果却查出了,海鲜和酸的菜品,因为这两个判断都为true,直接回被加到集合中


    所以我觉得这个代码不合理,是不是有点问题,请老师指教,应该如何修改可以实现我说的这个场景


    2021-05-11 22:24:08
  • LovelyChubby 回复 提问者 Mitsushima_Hikari #3

    改成下面这样呢

    (food.isHot() && mIsHot || food.isFish() && mIsFish || food.isSour() && mIsSour)


    2021-05-12 14:27:55
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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