如何将卡牌的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
相关产品推荐
相关产品推荐

