嘿那里有Stackoverflowers,
我刚刚开始用Java编程,遇到了一个关于打印对象的奇怪问题。当创建类型为gast的新对象时,用户必须输入他或她的生日。这个工作正常,但是,如果我尝试将其打印出来,我会返回0-0-0。这是为什么?顺便说一句,如果我直接使用参数构造函数创建一个新的数据,它可以正常工作。在哪里解决问题?我无法弄明白。我希望你们能帮助我。
提前致谢!
public class Datum {
private static String patroon = "\\d{2}-\\d{2}-\\d{4}";
public int dag;
public int maand;
public int jaar;
Datum(int dag, int maand, int jaar) {
System.out.print("constructor: " + dag);
this.dag = dag;
System.out.println(", dag: " + this.dag);
this.maand = maand;
this.jaar = jaar;
}
Datum() {
newDatum();
}
/* */
public static Datum newDatum() {
String input = Opgave5.userInput("Geboortedatum gast");
boolean b = input.matches(patroon);
if (b) {
String[] str = input.split("-");
int dag = Integer.parseInt(str[0]);
int maand = Integer.parseInt(str[1]);
int jaar = Integer.parseInt(str[2]);
Datum datum = new Datum(dag, maand, jaar);
System.out.println(datum);
return datum;
}
else {
return new Datum();
}
}
public String toString() {
return this.dag + "-" + this.maand + "-" + this.jaar;
}
}
第二课:
Gast() {
this.firstName = Opgave5.userInput("Voornaam gast");
this.lastName = Opgave5.userInput("Achternaam gast");
this.geboortedatum = new Datum();
System.out.println("gast: " + this.geboortedatum); // <--- this prints out 0-0-0
}
public String toString() {
return this.firstName + " " + this.lastName + " " + this.geboortedatum;
}
答案 0 :(得分:1)
我认为你不了解Java中的构造函数。您只是忽略构造函数中newDatum()
的结果。此外,如果它确实具有预期的效果,它可能会在newDatum()
内的构造函数调用中无限递归。使用这样的东西;允许newDatum()
编辑实例将起作用:
Datum() {
newDatum(this);
}
public static void newDatum(Datum instance) {
String input = Opgave5.userInput("Geboortedatum gast");
boolean b = input.matches(patroon);
if (b) {
String[] str = input.split("-");
int dag = Integer.parseInt(str[0]);
int maand = Integer.parseInt(str[1]);
int jaar = Integer.parseInt(str[2]);
instance.dag = dag;
instance.maand = maand;
instance.jaar = jaar;
System.out.println(instance);
}
else {
new Datum();
}
// ^^ Above code may be buggy, see my answer above code
}
答案 1 :(得分:0)
这一行:
this.geboortedatum = new Datum();
使用默认构造函数。这将不设置任何值。尝试传递via构造函数中的参数,如下所示:
this.geboortedatum = new Datum(1, 2, 3);
如果您想利用您编写的static
方法(这是您要求用户输入的位置),请执行以下操作:
this.geboortedatum = Datum.newDatum();