2014-09-30 32 views
-1

我正在構建一個Date類,當我嘗試創建一個對象與它不起作用。 (daysPerMonth中的錯誤) 但是,當我在對象外部使用setNewDay方法時,它確實起作用。方法不會工作,當我創建一個對象

你們有什麼線索我做錯了什麼?

這裏是我的代碼:

public class Date{ 

    private Dag day; 
    private Maand month; 
    private Jaar year; 
    private int maxday; 

    public Date(int day, int month, int year){ 
     setDate(day, month, year); 
    } 


    public void setDate(int day, int month, int year){ 
     this.month = new Maand(month); 
     setNewDay(day); 
     this.year = new Jaar(year); 
    } 


    private void daysPerMonth(){ 
     int february; 
     if(year.getYear()%4 == 0) { 
      february = 29; 
     }else{ 
      february = 28; 
     }; 
     int[] daymonth={31,february,31,30,31,30,31,30,31,30,31,30}; 
     maxday = daymonth[month.getMonth() -1]; 

    } 

     public void setNewDay(int day){ 
     daysPerMonth(); 
     if(day > 0 && day <= maxday){ 
      this.day = new Dag(day); 
     } else { 
      System.out.println("Wrong day"); 
     } 
    } 

} 
+2

定義「不起作用」。你有什麼跡象表明存在問題? – David 2014-09-30 15:07:32

+0

尤其比「daysPerMonth中的錯誤」更詳細。 – 2014-09-30 15:08:39

+0

你可能從這段代碼到處都是空指針。 – proulxs 2014-09-30 15:09:05

回答

1

我看到一個問題,在初始化順序:

public void setDate(int day, int month, int year){ 
    this.month = new Maand(month); 
    setNewDay(day); // this method depends indirectly on this.year, which is not yet 
        // initialized (setNewDay calls daysPerMonth which calls 
        // year.getYear()) 
    this.year = new Jaar(year); 
} 

將其更改爲:

public void setDate(int day, int month, int year){ 
    this.year = new Jaar(year); 
    this.month = new Maand(month); 
    setNewDay(day); 
} 
1

看的順序您來電,此

public void setDate(int day, int month, int year){ 
    this.month = new Maand(month); 
    setNewDay(day); 
    this.year = new Jaar(year); 
} 

應該

public void setDate(int day, int month, int year){ 
    this.month = new Maand(month); 
    this.year = new Jaar(year); 
    setNewDay(day); 
} 

因爲setNewDay()電話daysPerMonth()和需要一年(Jaar)。

0

取決於您嘗試的一年。 從內存中,你需要三個條件得到正確的二月:狀態並沒有MOD 100 &是MOD 400

+1

和你的日子是錯誤的Apr,Jun,Sep,Nov = 30,不是交替。 – 2014-09-30 15:23:43

0

既然你調用初始化年(這是由默認爲空)前setNewDay()方法。
setNewDay()方法,而不是調用它使用一年daysPerMonth()方法,但由於今年目前爲空(這是由默認值對每個參考)你得到NullPointerException異常
所以,你只需要調用方法setNewDay()之前初始化年:

public void setDate(int day, int month, int year){ 
     this.month = new Maand(month); 
     this.year = new Jaar(year); 
     setNewDay(day); //call this method after setting up the year 
    } 

所以,當你調用daysPerMonth()方法的這一年中包含的有效數據:

private void daysPerMonth(){ 
     int february; 
     if(year.getYear()%4 == 0) { //now year is valid 
      february = 29; 
     }else{ 
      february = 28; 
     } 
     int[] daymonth={31,february,31,30,31,30,31,30,31,30,31,30}; 
     maxday = daymonth[month.getMonth() -1]; 

    } 
相關問題