0

我的程序现在做什么:

  • 我用以下信息创建了一个人对象:firstname, lastname, birthdate(数据是不同的类)。
  • 日期类有四个变量:日、月、年和 18+(是或否)。

有什么作用:我可以成功地创建一个带有 a 的personfirstname对象。lastnamebirthdate

我的人班(看起来像它的作品)。

public class Person {

    public String firstName;
    public String lastName;
    public Date date; 

    public String toString() {
        return (firstName + " " + lastName + " (" + date); 
    }


    public Person(String firstName, String lastName, Date date) {
        this.firstName = firstName; 
        this.lastName = lastName; 
        this.date = date; 
    }

}

我的班级,包括我的主班,我也有一个方法来创建我的人。

public static Person setName() {

    String name; 
    String lastName
    String inputBirthdate;
    Date niceDate 
    Date newDate; 


    System.out.println("Firstname:");
    firstName = userInput();  
    System.out.println("Lastname:");
    lastName = userInput(); 
    System.out.println("Birthday:");
    inputBirthdate = userInput(); 
    niceDate = new Date(inputBirthdate);
    newDate = new Date(niceDate);

    return new Gast(firstName, lastName, newDate); 

}

然后我有我的 Date 类,在那里我检查日期的输入是否正确。请不要让我的 Date 类在没有第四个变量的情况下正常工作。

public class Date {

public String day; 
public String month; 
public String year;
public boolean child; 

public String toString() {
    return (day + "." + month + "." + year + "." + child);
}


/*Date(String day, String month, String year, boolean child) {
    this.day = dag; 
    this.month = month; 
    this.year = year; 
    this.child = child; 
}*/ //don't need this one, output is the same

public Date(Datum niceDate) {
    int bYear = Integer.parseInt(niceDate.year;
    int bMonth = Integer.parseInt(niceDate.day);
    int bDay = Integer.parseInt(niceDate.day);

    boolean child = false; 

    if (bYear > 1995) {
        this.child= true; 
    } else if (bYear == 1995 && bMonth > 10) {
        this.child = true; 
    } else if (bYear == 1995 && bMonth == 10 && bDay > 1) {
        this.child = true; 
    } else {
        this.child = false; 
    }  

}

public Date(String birthdate) {
    String patroon = "\\d{2}-\\d{2}-\\d{4}";
    boolean b = birthdate.matches(patroon);
    if (b) {
        String[] str = birthdate.split("-"); 
        for (String s: str)
        this.day = str[0];
        this.month = str[1];
        this.year = str[2];
    }
    else {
        System.out.println("Birthday is formatted wrong");
    } 
}

}

如果我运行它(是否检查成人的检查(检查看起来像它的工作!),但是,我的输入birthdate返回 null:

   Room 1: Name name (null.null.null)false    //boolean works, date not
   Room 2: available

我认为问题在于,在我Date课堂上的第二种方法中,在将public Date(Date Nicedate)日期解析为 int 后删除了我的日期。

所以基本上我只想返回布尔值并保持我的字符串完全相同,并且只编辑它们以将它们用作计算的 Int。

有人可以指出我正确的方向吗?可能这是一个非常简单的解决方案,但是我整天都在研究它并没有看到解决方案。

按要求编辑:(我在公共日期(基准 niceDate)中有这个语句,但日期仍然不会显示。嗯:

public Date(Datum niceDate) {
        this.year = year; 
        this.day = day; 
        this.month = month; 

    int bYear = Integer.parseInt(niceDate.year;
    int bMonth = Integer.parseInt(niceDate.day);
    int bDay = Integer.parseInt(niceDate.day);

    boolean child = false; 

    if (bYear > 1995) {
        this.child= true; 
    } else if (bYear == 1995 && bMonth > 10) {
        this.child = true; 
    } else if (bYear == 1995 && bMonth == 10 && bDay > 1) {
        this.child = true; 
    } else {
        this.child = false; 
    }  

}

public Date(String birthdate) {
    String patroon = "\\d{2}-\\d{2}-\\d{4}";
    boolean b = birthdate.matches(patroon);
    if (b) {
        String[] str = birthdate.split("-"); 
        for (String s: str)
        this.day = str[0];
        this.month = str[1];
        this.year = str[2];
    }
    else {
        System.out.println("Birthday is formatted wrong");
    } 
}

}

4

2 回答 2

2

问题是,当您从 中创建newDateniceDate,您不会复制日/月/年。

如果您查看public Date(Datum niceDate)构造函数,您设置的唯一实例变量是this.child,但您还需要设置this.daythis.monththis.year

另外,我建议您改为创建一个用于日期计算的函数,该函数被称为类isAdult的方法,如果您需要显示日期是否为 18 年以上Date,只需调用即可。niceDate.isAdult()否则,很容易犯错误,有this.child错误。

于 2013-10-05T18:14:27.850 回答
0
public Date(Datum niceDate) {
    this.year = year; 

在这个构造函数中,this.yearyear引用相同的成员变量。因此,您将该变量的值分配给自身。

然后你做

int bYear = Integer.parseInt(niceDate.year);

它解析来自的值niceDate并将其值分配给名为 的局部变量bYear。相反,您需要将结果分配parseIntthis.year

this.year = Integer.parseInt(niceDate.year);

您可以对所有其他变量进行类似更改。

于 2013-10-07T00:26:59.443 回答