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

Java枚举代码补全求助:实现指定输出及求Java学习建议

Java枚举问题解决方案及学习建议

嘿,我来帮你搞定这个Java枚举的问题,顺便给你些实用的Java学习建议~

补全后的完整代码

import java.util.List;
import java.util.Arrays;

public class DayOfWeekDriver {
    public enum DayOfWeek {
        MONDAY("M"),
        TUESDAY("T"),
        WEDNESDAY("W"),
        THURSDAY("R"),
        FRIDAY("F"),
        SATURDAY("S"),
        SUNDAY("Y"); // 修正缩写为Y,匹配目标输出

        static {
            MONDAY.next = TUESDAY;
            TUESDAY.next = WEDNESDAY;
            WEDNESDAY.next = THURSDAY;
            THURSDAY.next = FRIDAY;
            FRIDAY.next = SATURDAY;
            SATURDAY.next = SUNDAY;
            SUNDAY.next = MONDAY;
        }

        private DayOfWeek next;
        private String abbreviation;

        DayOfWeek(String abbreviation) {
            this.abbreviation = abbreviation;
        }

        // 重命名为next(),匹配main方法中的调用
        public DayOfWeek next() {
            return next;
        }

        public String getAbbreviation() {
            return abbreviation;
        }

        // 实现getLetter()方法,返回缩写字符
        public char getLetter() {
            return abbreviation.charAt(0);
        }

        // 实现静态方法:根据字符获取对应的星期枚举
        public static DayOfWeek toDayOfWeek(char c) {
            for (DayOfWeek day : values()) {
                if (day.getLetter() == c) {
                    return day;
                }
            }
            return SUNDAY; // 默认返回SUNDAY,匹配目标输出
        }

        // 实现静态方法:返回所有星期枚举的列表
        public static List<DayOfWeek> getDays() {
            return Arrays.asList(values());
        }
    }

    public static void main(String[] args) {
        DayOfWeek today = DayOfWeek.FRIDAY;
        if (today == DayOfWeek.SATURDAY || today == DayOfWeek.SUNDAY) {
            System.out.println("Today's a weekend.");
        } else {
            System.out.println("Today's a weekday.");
        }

        for (DayOfWeek day : DayOfWeek.values()) {
            System.out.printf("The abbreviation for %s is %c \n", day, day.getLetter());
        }

        for (Character c : "YMWFTRS".toCharArray()) {
            System.out.println(DayOfWeek.toDayOfWeek(c));
        }

        List<DayOfWeek> list = DayOfWeek.getDays();
        System.out.println(list.get(0) == DayOfWeek.values()[0]);
        System.out.println(DayOfWeek.MONDAY.next() == DayOfWeek.TUESDAY);
        System.out.println(today.next() == DayOfWeek.SATURDAY);
        System.out.println(DayOfWeek.SUNDAY.next() == DayOfWeek.MONDAY);
    }
}

代码修改说明

  • 修正SUNDAY的缩写:将原枚举中SUNDAY("S")改为SUNDAY("Y"),这样才能匹配目标输出中字符Y对应SUNDAY的逻辑。
  • 调整方法名:把枚举内的nextDay()重命名为next(),和main方法中的调用保持一致。
  • 实现getLetter():在枚举内部添加该方法,返回缩写字符串的第一个字符,满足输出格式要求。
  • 实现toDayOfWeek()静态方法:遍历所有枚举项,根据输入字符匹配对应的星期枚举,默认返回SUNDAY以符合目标输出。
  • 实现getDays()静态方法:通过Arrays.asList(values())返回包含所有枚举项的列表,确保list.get(0)和DayOfWeek.values()[0]指向同一个枚举实例(枚举是单例)。
  • 修正方法位置:把原本在DayOfWeekDriver类中的getLetter()移到枚举内部,因为main方法是通过枚举实例调用该方法的。

运行这段代码后,就能得到你需要的目标输出啦~

Java学习资源建议

  • 基础入门:Oracle官方的Java Tutorials是最权威的入门资料,覆盖了从语法到核心API的所有基础内容,讲解清晰易懂,适合从零开始系统学习。
  • 实战练习:
    • LeetCode的Java专项练习题:从简单到复杂,既能巩固语法知识,又能锻炼算法思维和问题解决能力。
    • Codewars的趣味编程题:题目风格多样,难度分层明确,适合在轻松的氛围中提升编码熟练度。
  • 进阶提升:
    • 《Effective Java(第三版)》:Java开发者必读的经典书籍,总结了大量实用的编码最佳实践,能帮你写出更优雅、高效且符合规范的代码。
    • 《Java核心技术卷1&卷2》:非常全面的Java教程书籍,从基础语法到高级特性(如并发编程、IO操作)都有细致讲解,适合深入学习。
  • 社区交流:
    • Stack Overflow:遇到问题先搜索,大部分常见问题都能找到详细解答;如果找不到,就像你现在这样提问,社区里的开发者们很乐意帮忙。
    • Reddit的r/java板块:经常有开发者分享最新的Java资讯、技术心得和实用工具,能让你跟上行业动态,拓宽技术视野。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:17