Java获取首张最小卡牌方法返回最后最小牌问题排查
问题原因
- 语法逻辑错误:Java 中
else关键字无法直接携带判断条件,你代码中第二、第三个分支错误写为else (条件),正确的多分支写法应该使用else if (条件),原写法本身不符合语法规范,即使部分环境容错执行,也会导致分支判断逻辑失效。 - 核心逻辑问题:你使用了严格小于
<作为判断条件,当存在多张数值相同的最小卡牌时,靠前的最小卡牌不满足「严格小于后面所有卡牌」的条件,分支判断不会触发,会一直向后匹配,最终返回最后一个出现的最小卡牌。就像你的测试用例中,2 of diamonds 和 2 of clubs 数值相等,card2的判断条件card2.getValue() < card4.getValue()结果为false,因此不会返回card2,最终走到最后一个分支返回card4。
修复方案
修改点如下:
- 将带条件的
else全部替换为else if,修正分支语法 - 将所有判断条件中的严格小于
<替换为小于等于<=,保证当存在多张相同最小值卡牌时,靠前的卡牌可以满足判断条件被优先返回 - 修正
new string的写法错误,Java中String类首字母大写,且toString()本身已经返回字符串对象,无需额外实例化。
修复后代码:
public String lowCard() { if (card1.getValue() <= card2.getValue() && card1.getValue() <= card3.getValue() && card1.getValue() <= card4.getValue()) { return card1.toString(); } else if (card2.getValue() <= card1.getValue() && card2.getValue() <= card3.getValue() && card2.getValue() <= card4.getValue()) { return card2.toString(); } else if (card3.getValue() <= card1.getValue() && card3.getValue() <= card2.getValue() && card3.getValue() <= card4.getValue()) { return card3.toString(); } else { return card4.toString(); } }
内容的提问来源于stack exchange,提问作者Jay Khan
相关产品推荐
相关产品推荐

