Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-静态构造函数_Java - Fatal编程技术网

Java-静态构造函数

Java-静态构造函数,java,Java,嘿,这里有飞机飞越者 我刚开始用Java编程,遇到了一个关于打印对象的奇怪问题。创建gast类型的新对象时,用户必须输入其生日。这个al工作正常,但是,如果我尝试打印出来,我返回0-0-0。为什么呢?顺便说一句,如果我直接用参数构造函数创建一个新的数据,它可以正常工作。问题出在哪里?我就是搞不懂。我希望你们能帮我 提前谢谢 public class Datum { private static String patroon = "\\d{2}-\\d{2}-\\d{4}"; pu

嘿,这里有飞机飞越者

我刚开始用Java编程,遇到了一个关于打印对象的奇怪问题。创建gast类型的新对象时,用户必须输入其生日。这个al工作正常,但是,如果我尝试打印出来,我返回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;
}
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()不起作用。它们都引用相同的方法,所以这很有意义:)谢谢!现在我明白我的错误:)