CodingBat CigarParty三元运算符高效写法优化咨询
代码问题与优化反馈
你当前的实现可以正常跑通结果,但存在几处明显的冗余问题:
- 布尔判断写法冗余:
isWeekend == false是Java布尔判断的常见不良写法,直接写!isWeekend可读性更强,还能避免误写为单等号赋值的低级错误。 - 三元运算符完全误用:你写的
cigars >= 40 && cigars <= 60 ? true : false、isWeekend ? true : false都是无效写法——三元运算符的作用是根据布尔条件返回两个不同的结果值,如果你两个分支只是返回true和false,和条件本身的布尔值完全一致,直接返回条件表达式本身即可,套一层三元没有任何意义。 - 分支结构冗余:你用了两层if+else做分支跳转,实际上这道题的判断逻辑非常直白,不需要多层分支拆分。
三元运算符的正确简洁写法
这道题的核心规则非常明确:
- 非周末场景:雪茄数量在[40,60]区间时派对成功
- 周末场景:雪茄数量大于等于40时派对成功
这个场景刚好适合用单层三元运算符实现,逻辑清晰没有冗余,代码如下:
public boolean cigarParty(int cigars, boolean isWeekend) { return isWeekend ? cigars >= 40 : cigars >= 40 && cigars <= 60; }
这个写法直接把isWeekend作为三元的判断条件:周末时直接返回cigars >=40的判断结果,非周末时返回区间判断的结果,没有多余的true/false包装,也没有多余的if分支。
如果你想进一步提炼逻辑,甚至可以不用三元,直接返回合并后的布尔表达式:
public boolean cigarParty(int cigars, boolean isWeekend) { return cigars >= 40 && (isWeekend || cigars <= 60); }
这个写法和上面的三元版本逻辑完全等价,你可以根据自己的可读性偏好选择。
最后给你几个三元运算符的使用原则,避免再写出冗余代码:
- 绝对不要写
[布尔表达式] ? true : false这种代码,直接返回布尔表达式本身即可 - 三元适合简单的二分支值返回场景,两个分支的返回值类型要保持一致
- 不要嵌套两层以上的三元运算符,否则可读性会急剧下降,这种场景改回if/else分支更合适
内容的提问来源于stack exchange,提问作者elliott yoo
相关产品推荐
相关产品推荐

