2013-02-11 20 views
-4

我幾乎完成了我的代碼;然而,並非僅僅取消週五的日期,而且恰巧是該月的第13天,它已經每十三次提交一次。我認爲:使用開關語句從Java中僅消除某些日期

int friday = ((startingDayOfWeek+dayOfYear) % 7); 
      if (dayOfYear != 13 && friday != 5) 
      System.out.println(month + "/" + dayOfYear); 
      dayOfYear++; 

會工作,但它是消除所有。我明白,有更簡單的方法來完成這一點;但是,我需要這樣做。以下是完整的代碼:

public class LoopDate { 

public static void main(String[] args) { 

    //Denotes that Tuesday is the first day of 2013 
    int startingDayOfWeek = 2; 
    int year = 2013; 
    int numDays = 0; 
    for (int month = 1; month <= 12; month++) { 
     switch (month) { 
     case 1: 
     case 3: 
     case 5: 
     case 7: 
     case 8: 
     case 10: 
     case 12: 
      numDays = 31; 
      break; 
     case 4: 
     case 6: 
     case 9: 
     case 11: 
      numDays = 30; 
      break; 
     case 2: 
      if (((year % 4 == 0) && !(year % 100 == 0)) 
        || (year % 400 == 0)) 
       numDays = 29; 
      else 
       numDays = 28; 
      break; 
     default: 
      System.out.println("Invalid month."); 
      break; 
     } 
     int dayOfYear = 1; 
     while (dayOfYear <= numDays) 
     { 
      int friday = ((startingDayOfWeek+dayOfYear) % 7); 
      if (dayOfYear != 13 && friday != 5) 
      System.out.println(month + "/" + dayOfYear); 
      dayOfYear++; 
     } 



    } 
} 
} 
+0

在前面的問題中,人們給了我代碼,我無法在這種情況下使用。它的目的是長時間蜿蜒,而不是一條簡單的路線,所以我沒有真正收到有關我正在努力完成的事情的很多建議。 – user2057847 2013-02-11 07:02:48

+0

我認爲這很明顯,爲什麼我會用一段代碼來把整個事情重寫成4行? – user2057847 2013-02-11 07:07:12

+0

我最終通過設置中斷點並逐步完成修復。我想我可以在這裏更容易地得到答案。也許還有一次。 – user2057847 2013-02-11 10:06:10

回答

0

您的布爾邏輯錯誤。

 
if (dayOfYear != 13 && friday != 5) 

應該是:

 
if (dayOfYear != 13 || friday != 5) 

你正在做的否定的檢查 「是13號星期五」。將正面檢查轉換爲負面檢查時,您不需要條件(完成),並翻轉操作員(OR變爲AND,AND變爲OR)。

另外,當處理這樣的布爾邏輯時,我通常給這些段提供有意義的名稱。它「成本」是一個變量,但可以爲您節省無數小時!

 
boolean isFridayThe13th = (dayOfYear == 13 && friday == 5); 
if (!isFridayThe13th) ...