Java枚举应用:扑克牌程序中如何将枚举值显示为数字
解决扑克牌枚举的显示值问题
嘿,我来帮你搞定这个枚举显示的问题~你尝试给单个枚举常量重写toString的思路是对的,但只给N2重写肯定没法覆盖所有情况,而且这种逐个重写的方式太繁琐了,也不利于后续维护。下面给你两种可行的方案,推荐第二种哦:
方案1:逐个枚举常量重写toString(不推荐)
如果你只是想快速验证思路,可以给每个枚举值单独重写toString,但这种方式代码冗余度很高:
public enum Numbers { N2 { @Override public String toString() { return "2"; } }, N3 { @Override public String toString() { return "3"; } }, N4 { @Override public String toString() { return "4"; } }, N5 { @Override public String toString() { return "5"; } }, N6 { @Override public String toString() { return "6"; } }, N7 { @Override public String toString() { return "7"; } }, N8 { @Override public String toString() { return "8"; } }, N9 { @Override public String toString() { return "9"; } }, N10 { @Override public String toString() { return "10"; } }, JACK { @Override public String toString() { return "J"; } }, QUEEN { @Override public String toString() { return "Q"; } }, KING { @Override public String toString() { return "K"; } }, ACE { @Override public String toString() { return "A"; } }; }
这种方式虽然能生效,但后续如果要修改显示规则,得一个个改,非常麻烦。
方案2:添加显示值字段(推荐,符合Java枚举最佳实践)
更优雅的方式是给枚举类添加一个存储显示值的字段,通过构造函数为每个枚举常量赋值,然后统一重写toString方法返回这个字段。这样代码更简洁,维护起来也方便:
public enum Numbers { // 每个枚举常量对应实际要显示的值 N2("2"), N3("3"), N4("4"), N5("5"), N6("6"), N7("7"), N8("8"), N9("9"), N10("10"), JACK("J"), QUEEN("Q"), KING("K"), ACE("A"); // 存储实际显示的值 private final String displayValue; // 枚举的构造函数(默认是private,不需要显式声明) Numbers(String displayValue) { this.displayValue = displayValue; } // 统一重写toString,返回我们想要的显示值 @Override public String toString() { return displayValue; } // 额外福利:如果需要通过显示值反向查找枚举常量,可以加这个静态方法 public static Numbers fromDisplayValue(String displayValue) { for (Numbers number : values()) { if (number.displayValue.equals(displayValue)) { return number; } } throw new IllegalArgumentException("找不到对应枚举的显示值: " + displayValue); } }
测试验证
现在你直接打印枚举常量,就能得到想要的显示值了:
public class Test { public static void main(String[] args) { System.out.println(Numbers.N2); // 输出 "2" System.out.println(Numbers.JACK); // 输出 "J" System.out.println(Numbers.ACE); // 输出 "A" } }
至于你之前的尝试为什么看起来没效果,大概率是因为你只重写了N2的toString,其他枚举常量还是会返回默认的名称(比如N3会输出"N3"),所以整体效果不明显。用第二种方案就能一次性解决所有枚举值的显示问题啦~
内容的提问来源于stack exchange,提问作者user9773642
相关产品推荐
相关产品推荐

