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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:10:12