Синтаксис с Java на счетчиках

Это вопрос, данный:

Это вопрос

Это моя попытка:

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

Это мое сообщение об ошибке: сообщение об ошибке

Нам сказано не добавлять первую "публичную" в объявление класса из-за того, как работает сайт.

Я не очень знаком с синтаксисом перечислителей (и я тоже новичок в Java), поэтому я не совсем уверен, что я делаю неправильно. Любая помощь будет оценена.

2 ответа

Решение

Вам также нужно будет создать перечисление из любой заданной строки. Смотрите внутренний класс перечисления 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());
    }
}

Вы забыли тип Frequency в этом методе setFrequency здесь:

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

Это должно быть:

public void setFrequency( Frequency freq){
    this.frequency = freq;
}
Другие вопросы по тегам