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

如何将卡牌的int型Rank转换为返回字符串的数组以优化代码?

卡牌代码优化方案

优化思路

将牌面(Rank)的映射关系用数组存储,直接通过rank值索引获取对应字符串,替代冗余的if-else分支;同时可进一步简化花色(Suit)的判断逻辑,让代码更简洁易维护。

优化后完整代码

public class Card {
    private int value;
    private String suit;

    // 牌面对应数组:索引与rank值(0-12)一一匹配
    private static final String[] RANK_VALUES = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
    // 花色映射Map,比多分支判断更高效直观
    private static final java.util.Map<String, String> SUIT_SYMBOLS = java.util.Map.of(
        "spade", "\u2660",
        "club", "\u2663",
        "heart", "\u2665",
        "diamond", "\u2666"
    );

    public Card(int value, String suit) {
        this.value = value;
        this.suit = suit;
    }

    public String toString() {
        return getVal() + getSuit();
    }

    public String getVal() {
        int rank = value % 13;
        // 直接通过rank索引数组取值,增加边界判断避免越界
        return rank >= 0 && rank < RANK_VALUES.length ? RANK_VALUES[rank] : "";
    }

    public String getSuit() {
        // 统一转小写后从Map取值,无匹配则返回空串
        return SUIT_SYMBOLS.getOrDefault(suit.toLowerCase(), "");
    }
}

关键优化点

  • 牌面(Rank)优化:用RANK_VALUES数组存储所有牌面字符串,数组索引与value % 13得到的rank值完全对应,一行代码完成映射,彻底消除冗余的if-else链,后续修改牌面规则只需调整数组即可。
  • 花色(Suit)优化:用Map存储花色名称到符号的映射,通过getOrDefault方法直接获取结果,比原有的多分支if-else更高效易读;如果坚持使用数组,也可将花色名称和符号分别存入两个数组,遍历匹配,但Map的方式逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:25:21