You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Card对象比较问题:已实现rank比较,需补充suit比较逻辑

解决Card对象compareTo方法的花色比较问题

你的问题出在牌面(Rank)相同时没有继续比较花色(Suit),直接返回了0,导致逻辑错误。根据你设定的规则,花色的ordinal值已经对应了等级(红桃最小,黑桃最大),所以只需要在牌面相等时,继续比较花色的ordinal即可。

修改后的简洁版代码

@Override
public int compareTo(Card o) {
    // 先比较牌面,用Integer.compare简化判断逻辑
    int rankCompare = Integer.compare(this.rank.ordinal(), o.rank.ordinal());
    if (rankCompare != 0) {
        return rankCompare;
    }
    // 牌面相同时,比较花色的ordinal值
    return Integer.compare(this.suit.ordinal(), o.suit.ordinal());
}

逻辑说明

  1. 优先比较牌面:通过Integer.compare直接获取牌面ordinal的比较结果,正数表示当前牌面更大,负数表示更小,0则代表牌面相同。
  2. 牌面相等时比较花色:此时直接对比花色的ordinal值,同样用Integer.compare返回结果,完全符合你设定的“红桃最低、黑桃最高”规则。

如果你习惯原有的if判断风格,也可以这样写

@Override
public int compareTo(Card o) {
    if(this.rank.ordinal() > o.rank.ordinal()) {
        return 1;
    }
    if (this.rank.ordinal() < o.rank.ordinal()) {
        return -1;
    } 
    // 牌面相同时,依次判断花色
    if(this.suit.ordinal() > o.suit.ordinal()) {
        return 1;
    }
    if(this.suit.ordinal() < o.suit.ordinal()) {
        return -1;
    }
    return 0;
}

两种写法逻辑完全一致,前者利用Java工具方法减少了冗余的if判断,代码更简洁。

内容的提问来源于stack exchange,提问作者acidic231

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:24:58