简体   繁体   中英

Syntax with Java on Enumerators

This is the question given:

这是给出的问题

This is my attempt:

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

This is my error message: 错误信息

We are told not to add the first "public" in the class declaration because of the way the website works.

I'm not very familiar with the syntax behind enumerators (and I'm quite new to java too) so I'm not entirely sure what I'm doing wrong. Any help would be appreciated.

you forgot the type Frequency in this method setFrequency here:

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

it must be:

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

You will also need to build the enum from any given String. See the inner enum class fromString(String aFrequency). As a bonus, the examply also shows you can add extra information to an enum.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM