我需要使用枚举的帮助才能使该程序正常运行

I need help using enums to get this program working

所以这是我第一次在 Whosebug 上提问,但我需要帮助解决这个问题。我必须使用包含构造函数、方法和静态方法的枚举。

所以主要的东西都已经写完了,剩下的是我写的,但我现在迷路了。

题目是解决这写了一半的代码并有输出。输出应该是这样的:

Today's a weekday. 
The abbreviation for MONDAY is M
The abbreviation for MONDAY is T
The abbreviation for MONDAY is W
The abbreviation for MONDAY is R
The abbreviation for MONDAY is F
The abbreviation for MONDAY is S
The abbreviation for MONDAY is Y
SUNDAY
MONDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
true
true
true
true

到目前为止我的代码:

import java.util.List;

public class DayOfWeekDriver
{
    public enum DayOfWeek{
        MONDAY("M"), TUESDAY("T"), WEDNESDAY("W"), THURSDAY("R"), FRIDAY("F"), SATURDAY("S"), SUNDAY("S");

        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;

        public DayOfWeek nextDay(){
            return next;
        }

        private String abbreviation;

        private String day;

        DayOfWeek(String abbreviation) {
            this.abbreviation = abbreviation;
        }
        public String getAbbreviation() {
            return abbreviation;
        }  

        public String getDays(){
            return day;
        }  
    }

    public char getLetter(){

    }



    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);

    }
}

另外,如果我能得到有关在哪里可以了解更多 java 的建议,那就太好了!谢谢。

enum 是 class 的一种特殊类型。单机写class。它使程序的其余部分更易于维护、阅读和推理。由于枚举中的元素是常量,因此使用所有大写名称以获得最大的可读性。

public enum Day {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY;
};

现在您有了 class,您想要添加一个特征,即 "single letter" 天表示。您可以通过添加属性为 class 执行此操作。 Enums 都是常量和 classes,因此我们将利用它的 class 类特征将 "single letter" 天表示添加到 enum

public enum Day {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY;

    private String shortName;

    public String getShortName() {
        return shortName;
    }
};

但是,我们如何设置这个shortName?答案是,由于 enum 是 class,我们使用构造函数。 enum 存在构造函数,但它们受到限制。它们必须 private 以防止构造新实例(枚举的一个特性)。

public enum Day {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY;

    private String shortName;

    private Day(String abbreviation) {
       shortName = abbreviation;
    }

    public String getShortName() {
        return shortName;
    }
};

这就引出了最后一个问题,我们如何声明要传递给构造函数的值。好吧,你在声明静态值时就这样做了,就像这样

public enum Day {
    SUNDAY("S"),
    MONDAY("M"),
    TUESDAY("T"),
    WEDNESDAY("W"),
    THURSDAY("R"),
    FRIDAY("F"),
    SATURDAY("Y");

    private String shortName;

    private Day(String abbreviation) {
       shortName = abbreviation;
    }

    public String getShortName() {
        return shortName;
    }
};

这将 "single letter" 表示置于它所代表的事物中,提供良好的代码局部性和易于维护。

在您的代码中使用它

 if ( day == Day.MONDAY ) { // Typical enum comparison

 System.out.println(day.getShortName()); // prints the day's short name

学习Java时,很难以良好的面向对象着手。你的问题基本上是 "how to I add something to an enum" 中的一个,但因为你使用了你的枚举,嵌入到另一个 class 中,它被错误地解决了 class。您开始编程 "how can I make this class give me the right answer for that enum"。如果可以避免的话,不要那样编程。而是编写您的代码,使 "other object" 为您提供答案。

enum in Java 是另一种语言的想法的移植。 Java 在使 enum 看起来像 C 的枚举以及使其表现得像 Java 语言的集成组件方面做得很好。也就是说,人们最初会接触到 C 的枚举语法,这意味着他们会接触到 C 的枚举维护问题。因此,对于学习 Java 和 Java 的枚举的人来说,您的方法是可以理解的。也就是说,将 enum 用作对象将使您的代码更快、更易于阅读且更易于推理。既然您已经看到了不同的方法,请在适当的时候使用它。