2015-11-30 33 views
2

我有一個運行1到7的稱爲dayCounter的int。並且我有一個名爲day的字符串。 dayCounter使用TimerTask每10秒遞增一次。if語句的長列表的更好的替代方案

我用下面如果用於TimerTaskprivate void run()方法::

if (dayCounter == 1) { 
    day = "Monday"; 
} 

內聲明我有一個if語句這樣的一週中的每一天。有沒有更有效的方法獲得相同的結果。我想也許創建一個數組與持有字符串月,然後以某種方式增加它。但我不知道如何去做。有任何想法嗎?

回答

4

其他然後一個if語句,你可以使用一個開關的情況下與反

switch(dayCounter){ 
    case 1: 
     day = "Monday"; 
     break; 
    case 2: 
     day = "Tuesday"; 
     break; 
} 

雖然這是另一種方式來做到這一點,他們都創造相同的字節碼和這兩個選項之間的唯一區別是代碼的可讀性。

3

也許最簡單的方法是將要使用的天陣:

public class Demo { 

    public static void main(String[] args) { 
     System.out.println(getDay(1)); 
     System.out.println(getDay(7)); 
    } 

    // Returns the corresponding day for the given dayCounter. 
    // Assumes that dayCounter goes from 1-7. 
    private static String getDay(int dayCounter) { 
     String[] days = new String[] { "Monday", "Tuesday", "Wednesday", 
       "Thursday", "Friday", "Saturday", "Sunday" }; 
     return days[dayCounter - 1]; 
    } 
} 

如果你的櫃檯必須高於7(例如,你用1在每個定時器一步遞增它),你可能會想有興趣在此版本中,基本上所有可用天循環:

public class Demo { 

    public static void main(String[] args) { 
     System.out.println(getDay(1)); 
     System.out.println(getDay(7)); 
     System.out.println(getDay(8)); 
     System.out.println(getDay(13)); 
    } 

    // Returns the corresponding day for the given dayCounter. 
    // Maps dayCounter to the range of 1-7, assumes that dayCounter 
    // goes from 1-Integer.MAX_VALUE. 
    private static String getDay(int dayCounter) { 
     String[] days = new String[] { "Monday", "Tuesday", "Wednesday", 
       "Thursday", "Friday", "Saturday", "Sunday" }; 
     return days[dayCounter % 7]; 
    } 
} 

或者你可以使用DateFormatSymbols檢索平日,讓他們甚至(幾乎)自動翻譯給你:

import java.text.DateFormatSymbols; 

public class Demo { 

    public static void main(String[] args) { 
     System.out.println(getDay(1)); 
     System.out.println(getDay(7)); 
    } 

    // Returns the corresponding day for the given dayCounter. 
    // Assumes that dayCounter goes from 1-7. 
    private static String getDay(int dayCounter) { 
     String[] days = DateFormatSymbols.getInstance().getWeekdays(); 
     return days[dayCounter]; 
    } 
} 

或者對於Java 8和更高版本,目前首選的方法可能是使用新的java.time API(可以使用方法參數)。這個API包含一個方便的DayOfWeek枚舉。

import java.time.DayOfWeek; 
import java.time.format.TextStyle; 
import java.util.Locale; 

public class Demo { 

    public static void main(String[] args) { 
     System.out.println(getDay(1)); 
     System.out.println(getDay(7)); 
    } 

    // Returns the corresponding day for the given dayCounter. 
    // Assumes that dayCounter goes from 1-7. 
    private static String getDay(int dayCounter) { 
     return DayOfWeek.of(dayCounter) 
       .getDisplayName(TextStyle.FULL, Locale.getDefault()); 
    } 

} 

如果你只是想更換if報表,與switch-case走在瑞安的答覆中提到。

+0

除非您預計一週的某些時間會改變一些時間,否則最好使用枚舉。 – azurefrog

+0

@azurefrog:我實際上是從一個枚舉開始的,但認爲它可能太複雜了。特別是當已經有一個內置的枚舉爲此目的。不過,總的來說,這是一個有效的點 – Marvin

1

你可以有一個字符串數組dayOfWeek,一個星期的每一天。然後你使用dayCounter作爲數組的索引。例如,如果dayCounter = 1,則dayOfWeek [dayCounter]將是「Monday」。這樣你只需要一個語句就可以得到一週中的一天的名字。