2011-11-12 61 views
-1

這就是我想要做的:Java枚舉

創建一個包含表示星期幾的枚舉的應用程序。顯示日期列表,然後提示用戶一天。顯示選定日期的營業時間。假設週日的營業時間爲11日至5日,平日爲9日至9日,週六爲9日至6日。

這是我有:

import javax.swing.JOptionPane; 


public class DayOfWeek { 
Day day; 

public void Day(Day day) { 
    this.day = day; 
} 

public void businessHours() { 
    switch (day) { 
     case SATURDAY: System.out.println("Open from 9 to 6."); 
        break; 

     case SUNDAY: System.out.println("Open from 11 to 5."); 
        break; 

     default:  System.out.println("Open from 9 to 9."); 
        break; 
    } 
} 

public static void main(String[] args) { 

    String dayInput = JOptionPane.showInputDialog("Please input a day: "); 

    EnumDay sixthDay = new EnumDay(Day.SATURDAY); 
    sixthDay.businessHours(); 
    EnumDay seventhDay = new EnumDay(Day.SUNDAY); 
    seventhDay.businessHours(); 

    if (dayInput == "Saturday") 
    { 
    JOptionPane.showMessageDialog(null, sixthDay.businessHours()); 
    System.exit(0); 
    } 

    else if (dayInput == "Sunday") 
    { 
     JOptionPane.showMessageDialog(null, seventhDay.businessHours()); 
     System.exit(0); 
    } 
    else 
    { 
     JOptionPane.showMessageDialog(null, default.businessHours()); 
     System.exit(0); 
    } 
} 
} 

和枚舉類:

public enum Day { 

SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
THURSDAY, FRIDAY, SATURDAY 

} 

請幫助我該怎麼做比較,並打印出來。謝謝。

+0

什麼是EnumDay,你爲什麼要創建它? –

回答

1

你可以把你的數據是這樣的:

Class WorkingDay{ 
    Day day; 
    Time startTime; 
    Time endTime; 

    public WorkingDay(Day day, Time startTime, Time endTime){ 
    this.day = day; 
    this.startTime = startTime; 
    this.endTime = endTime; 
    } 

//getters/setters 
... 

} 

class Time{ 
    int hours; 
    int minutes; 
    public Time(int hours, int minutes){ 
    ... 
    } 

    public String toString(){ 
     return hours + " : " + minutes; 
    } 

    //getters/setters 
    ... 

} 

及用途:

WorkingDay monday = new WorkingDay (Day.MONDAY, new Time(9, 0), new Time(21,0)); 
... 
WorkingDay saturday= new WorkingDay (Day.SATURDAY, new Time(9, 0), new Time(18,0)); 
... 

WorkingDay workingDay = ...; 
System.out.println("Open from " + workingDay.getStartTime() + " to " + workingDay.getEndTime()); 

+1

如果你想要走這條路線,那就不需要'WorkingDay'類了。 Java中的enum是一個「特殊」類,你可以擴展到包含這個功能(「擴展」爲缺乏更好的術語 - 你可以添加方法和私有字段到你的'enum')。編輯:flesk的回答很好地說明了這一點。 –

+2

@BrianRoach,當我們在enum類中添加字段時,我們有預定義的實例(星期一(Time1,Time2)...)。當我們從外部設置時間參數時,我們的代碼更加靈活。 –

+0

這對DTO來說很好,但爲什麼要這樣做呢,除非你使用數據庫來實現持久性,這在這裏不是這種情況? – flesk

0

你可以得到你enum值的String交涉:

for (Day d : Day.values()) 
{ 
    System.out.println(d); 
} 

這應該有助於您打印日期列表。

一旦你從用戶(字符串)輸入,你可以映射回用枚舉:

Day userInputDay = Day.valueOf(userInputString); 

現在你有正確的枚舉值,你的switch聲明將開始發揮作用。

6

如果您創建枚舉這樣的:

public enum Day { 
    SUNDAY("Sunday", "Open from 11 to 5."), 
    MONDAY("Monday", "Open from 9 to 9."), 
    TUESDAY("Tuesday", "Open from 9 to 9."), 
    WEDNESDAY("Wednesday", "Open from 9 to 9."), 
    THURSDAY("Thursday", "Open from 9 to 9."), 
    FRIDAY("Monday", "Open from 9 to 9."), 
    SATURDAY("Saturday", "Open from 9 to 6."); 

    private final String day; 
    private final String openingHours; 

    Day(String day, String openingHours) { 
     this.day = day; 
     this.openingHours = openingHours; 
    } 

    public String getDay() { 
     return day; 
    } 

    public String getOpeningHours() { 
     return openingHours; 
    } 
} 

就可以得到所需的一天是:

Day day = null; 

for (Day d : Day.values()) { 
    if (d.getDay().equals(dayInput)) { 
     day = d; 
     break; 
    } 
} 

,然後就

if (day != null) 
    System.out.println(day.getOpeningHours()); 
0

基於謝爾蓋的回答是: 您可以將字段添加到枚舉,因爲枚舉被編譯爲內置java clas的子項s Enum

enum WorkingDay{ MON("Monday", 9, 9), TUE... SUN("Sunday", 11,5); 
     String name; 
     int start; 
     int end; 
     //add private ctor 

     public static WorkingDay forString(String dayName) { 
      for(WorkingDay d : values()) 
       if(d.name.equals(dayName)) 
         return d; 
     } 
} 

使用日曆當然,如果你需要與工作時間一起操作。 這樣,你可以這樣做:

WorkingDay day = WorkingDays.forString(dayInput); 
System.out.println("Open from: " + day.start + " to:" + day.end); 
0

您有錯誤。取而代之的

dayInput == "Sunday" 

你應該使用equals方法

"Sunday".equals(dayInput) 

因爲實際上比較字符串是否相等,不能引用平等。 查看Java String.equals versus ==瞭解更多詳情。

或者你可以玩的以下內容:

Day day = Day.valueOf(dayInput.toUpperCase(Locale.ENGLISH)) 

我會離開它作爲一個練習讀者找出當"Friday".toUpperCase()是不一樣的"Friday".toUpperCase(Locale.ENGLISH)

0

我寧願做你的任務是這樣的:

public enum Day { 
    MONDAY(new Time(9, Time.AM), new Time(6, Time.PM)), 
    // ... rest of weekdays here 
    SATURDAY(new Time(9, Time.AM), new Time(6, Time.PM)), 
    SUNDAY(new Time(11, Time.AM), new Time(5, Time.PM)); 

    private final Time open; 
    private final Time close; 

    private Day(Time open, Time close) { 
     this.open = open; 
     this.close = close; 
    } 

    public String businessHours() { 
     return "Open from " + open.toString() + " to " + close.toString() + "."; 
    } 

    @Override public String toString() { 
     return name().substring(0, 1) + name().substring(1).toLowerCase(); 
    } 
} 

和主要方法:

public static void main(String[] args) { 
    final String dayInput = JOptionPane.showInputDialog("Please input a day: "); 
    try { 
     final Day actualDay = Day.valueOf(dayInput.toUpperCase()); // I don't know swing at all, it could be null pointer access here 
    } catch(IllegalArgumentException e) { 
     // for example print dialog with error about wrong day name 
    } 
    System.exit(0); 
} 

Time類可以只用toString()方法來實現,但你可以簡單地添加分鐘,比較等(或者你可以使用普通的整數而不是創建時間類,但它是非常不可擴展的)。