Java-静态构造函数
嘿,这里有飞机飞越者 我刚开始用Java编程,遇到了一个关于打印对象的奇怪问题。创建gast类型的新对象时,用户必须输入其生日。这个al工作正常,但是,如果我尝试打印出来,我返回0-0-0。为什么呢?顺便说一句,如果我直接用参数构造函数创建一个新的数据,它可以正常工作。问题出在哪里?我就是搞不懂。我希望你们能帮我 提前谢谢Java-静态构造函数,java,Java,嘿,这里有飞机飞越者 我刚开始用Java编程,遇到了一个关于打印对象的奇怪问题。创建gast类型的新对象时,用户必须输入其生日。这个al工作正常,但是,如果我尝试打印出来,我返回0-0-0。为什么呢?顺便说一句,如果我直接用参数构造函数创建一个新的数据,它可以正常工作。问题出在哪里?我就是搞不懂。我希望你们能帮我 提前谢谢 public class Datum { private static String patroon = "\\d{2}-\\d{2}-\\d{4}"; pu
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;
}
Gast(){
this.firstName=Opgave5.userInput(“Voornaam gast”);
this.lastName=Opgave5.userInput(“Achternaam gast”);
this.geboortedatam=新数据();
System.out.println(“gast:+this.geboortedatam);//此行:
this.geboortedatum = new Datum();
正在使用默认构造函数。这将不设置任何值。请尝试通过构造函数传入参数,如下所示:
this.geboortedatum = new Datum(1, 2, 3);
如果您想利用您编写的静态
方法(即请求用户输入的方法),请执行以下操作:
this.geboortedatum = Datum.newDatum();
我认为您不了解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
}
我知道,如果我以这种方式使用构造函数,它会起作用。关键是我需要通过userInput处理数据。不幸的是,将更改的newDatum()添加到Datum.newDatum()不起作用。它们都引用相同的方法,所以这很有意义:)谢谢!现在我明白我的错误:)