2014-09-30 79 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]; 

    } 
相关问题