0

这是给出的问题:

这是给出的问题

这是我的尝试:

class SerialPublication {

public enum Frequency {DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY, UNDEFINED}

protected Frequency frequency;

public SerialPublication(){
frequency = Frequency.UNDEFINED;
}

public SerialPublication(String freq){
setFrequency(freq);
}

public void setFrequency(Frequency freq){
this.frequency = freq;
}

public Frequency getFrequency(){
return frequency;
}
}

这是我的错误信息: 错误信息

由于网站的工作方式,我们被告知不要在类声明中添加第一个“public”。

我对枚举器背后的语法不是很熟悉(而且我对 java 也很陌生)所以我不完全确定我做错了什么。任何帮助,将不胜感激。

4

2 回答 2

2

您在这里忘记了此方法setFrequency中的频率类型:

public void setFrequency(freq){
    frequency = Frequency.freq;
}

肯定是:

public void setFrequency( Frequency freq){
    this.frequency = freq;
}
于 2017-04-28T09:33:23.537 回答
1

您还需要从任何给定的字符串构建枚举。参见内部枚举类 fromString(String aFrequency)。作为奖励,该示例还显示您可以向枚举添加额外信息。

 public class SerialPublication {

    public enum Frequency {
        //Can add extra information to enums
        DAILY("Daily"),
        WEEKLY("Weekly"),
        MONTHLY("Monthly"),
        QUARTERLY("Quarterly"),
        YEARLY("Yearly"),
        UNDEFINED("Undefined");

        private final String frequency;

        Frequency(String frequency) {
            this.frequency = frequency;
        }

        public String getFrequency() {
            return frequency;
        }

        /**
         * Builds an enum from a given frequency string
         * @param aFrequency
         * @return
         */
        public static Frequency fromString(String aFrequency) {
            for (Frequency frequency : Frequency.values()) {
                if(frequency.getFrequency().toLowerCase().equals(aFrequency.toLowerCase())) {
                    return frequency;
                }
            }
            return Frequency.UNDEFINED; //Could send null back
        }
    }

    private Frequency frequency;

    public SerialPublication(){
        frequency = Frequency.UNDEFINED;
    }

    public SerialPublication(String freq){
        this.setFrequency(freq);
    }

    /**
     * Sets the frequence based on a String. This handles invalid input by assuming nonsense equals undefined
     * @param frequency
     */
    public void setFrequency(String frequency){
        this.setFrequency(Frequency.fromString(frequency));
    }

    /**
     * Sets the frequency based on the Frequency Enum.
     * @param frequency
     */
    public void setFrequency(Frequency frequency) {
        this.frequency = frequency;
    }

    public Frequency getFrequency(){
        return frequency;
    }

    public static void main(String[] args) {
        SerialPublication publication = new SerialPublication();
        System.out.println(publication.getFrequency());
        publication.setFrequency("monthly");
        System.out.println(publication.getFrequency());
        publication.setFrequency(Frequency.QUARTERLY);
        System.out.println(publication.getFrequency());
        publication.setFrequency("cows are great");
        System.out.println(publication.getFrequency());
    }
}
于 2017-04-28T09:48:12.080 回答