2015-11-04 65 views
0

您將星期幾輸入爲int(星期日= 0 ...星期六= 6),並輸出到最近的星期六爲止的天數。是否有一個簡單的等式,我可以用這個方法替代?

如果是星期六,它將返回0,因爲它是星期六。如果是星期日,它將返回-1,因爲它是星期六過去1天。如果是星期五,則返回1,因爲它是未來1天。

private int nightShiftTransform(int dayOfWeek) 
    { 
     switch (dayOfWeek) 
     { 
      case 0: 
       return -1; 
      case 1: 
       return -2; 
      case 2: 
       return -3; 
      case 3: 
       return 3; 
      case 4: 
       return 2; 
      case 5: 
       return 1; 
      case 6: 
       return 0; 
      default: 
       throw new Exception("Invalid day of week"); 
     } 
    } 

我討厭這個switch語句,但是我找不出一個簡單的方程式來代替它。

+0

謝謝你們。我會在本週晚些時候測試答案。 – Migit

回答

1

一種簡單的方法,如果是DAYOFWEEK 0和6之間;用C

result = 6 - DayOfWeek - 7*(DayOfWeek < 3); 

假設規則(也就是形式DayOfWeek < 3的表達,如果假和1如果真產生的0的值)。

+0

我甚至從未想過在這樣的等式中使用布爾值......我喜歡它! – Migit

+0

因爲它是C#我不得不添加一個轉換爲布爾到一個整數。調整後的版本爲:6 - DayOfWeek - 7 * Convert.ToInt32(DayOfWeek <3); – Migit

2

我假設你使用的是C#。 一個簡單的方法:

private int nightShiftTransform(int dayOfWeek) 
    { 
     // ternary expression. You can do an if/else if you prefer 
     int result = (dayOfWeek >= 3 ? 6 - dayOfWeek : -(dayOfWeek + 1)); 
     return result; 
    } 
0

equation不是一個有用的標記。我會使語言清晰。我不知道這是Java還是C#。

如果這是Java,我建議使用Calendar常數而不是int。我認爲它更具自我記錄和可讀性。

我不能carndacier真好三元表達提高:

package date; 

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Arrays; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.List; 

/** 
* NightShiftDemo 
* @author Michael 
* @link https://stackoverflow.com/questions/33519165/is-there-a-simple-equation-i-can-replace-this-method-with 
* @since 11/4/2015 5:21 AM 
*/ 
public class NightShiftDemo { 

    public static void main(String[] args) { 
     try { 
      DateFormat formatter = new SimpleDateFormat("yyyy-MMM-dd"); 
      List<String> dates = Arrays.asList("2015-Nov-01", "2015-Nov-02", "2015-Nov-03", "2015-Nov-04", "2015-Nov-05", "2015-Nov-06", "2015-Nov-07"); 
      for (String date : dates) { 
       System.out.println(String.format("date: %s shift: %d", date, nightShiftTransform(formatter.parse(date)))); 
      } 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static int nightShiftTransform(int dayOfWeek) throws Exception 
    { 
     switch (dayOfWeek) 
     { 
      case 0: 
       return -1; 
      case 1: 
       return -2; 
      case 2: 
       return -3; 
      case 3: 
       return 3; 
      case 4: 
       return 2; 
      case 5: 
       return 1; 
      case 6: 
       return 0; 
      default: 
       throw new Exception("Invalid day of week"); 
     } 
    } 

    public static int nightShiftTransform(Date date) { 
     if (date == null) throw new IllegalArgumentException("date cannot be null"); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(date); 
     int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); 
     return ((dayOfWeek >= Calendar.WEDNESDAY) ? Calendar.SATURDAY - dayOfWeek : -dayOfWeek); 
    } 
} 
+0

我不確定你的回報是否正確。 例如,如果我們是「星期四」,即第4天(dayOfWeek = 4),則它是> = Calendar.WEDNESDAY,因此將返回-dayOfWeek(-4)。但預期的結果將是2 – carndacier

+0

我跑了代碼。我認爲輸出符合您的要求。我今晚會再檢查一次。 – duffymo

+1

與Java的一個區別:星期日= 1,星期六= 7。 – duffymo

相關問題