Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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_Constructor_Getter_Setter - Fatal编程技术网

Java 接二连三

Java 接二连三,java,constructor,getter,setter,Java,Constructor,Getter,Setter,所以我试着制作一个类似优步的骑乘系统。所以我试图制定一些关于汽车注册号的规则 public void setRegNo(String regNo) { if (regNo.length() == 6) { if (regNo.substring(0, 3).matches("[a-zA-Z]+")) { if (regNo.substring(3).matches("[0-9]+"))

所以我试着制作一个类似优步的骑乘系统。所以我试图制定一些关于汽车注册号的规则

public void setRegNo(String regNo) {
        if (regNo.length() == 6) {
            if (regNo.substring(0, 3).matches("[a-zA-Z]+")) {
                if (regNo.substring(3).matches("[0-9]+")) {
                    this.regNo = regNo;
                } else {
                    this.regNo = "Error! The Registration number ends with 3 numerical characters.";
                }
            } else {
                this.regNo = "Error! The registration number begins with 3 alphabetical characters.";
            }
        } else {
            this.regNo = "Error! The Registration number must be 6 characters long.";
        }
    }
根据这种setter方法,注册号必须至少6个字符长,前三个字符必须是字母,后三个字符必须是整数。然后我创建了一个getter方法,并最终将这个注册号传递给car类的构造函数。但令人惊讶的是,当我试图打印注册号时,它并没有遵守这些规则。我添加了一张我得到的结果的图片


因此,如果有人知道为什么会发生这种情况,请告诉我。

您需要从构造函数参数
regNo
中删除,并使用setter设置此参数。大概是这样的:

Car car = new Car("cat", "dog", "pranav Khurana", 4);
car.setRegNo("abc3");
另一种方法-您可以在构造函数中使用setter,例如:

public Car(String regNo, String name) {
    this.setRegNo(regNo);
    this.name = name;
}

问题是您没有使用已实现的setter方法来设置汽车的
regNo
。您应该在构造函数方法中使用setter方法来重用您编写的代码。另一件事是,您应该使用正则表达式来检查它是否符合您想要的格式。Fallowing regex检查前三个字符是否为“单词字符”,后三个字符是否为数字:

public void setRegNo(String regNo) {
    String myRegex="\\w\\w\\w\\d\\d\\d";
    if (regNo.matches(myRegex))
        this.regNo=regNo;
    else
        System.err.println("This is not a  registration number!!!")
}

您在哪里调用了
setRegNo
方法?我猜你误解了set和get的实际工作原理。对象初始化从构造函数开始,在您的例子中,它从构造函数开始,从未调用set方法,然后您调用get方法。请包含一个,以便我们可以看到如何调用它。否则,它看起来还可以,尽管过于复杂。您可以使用单个正则表达式来实现这一点。当您创建新对象时,构造函数不会调用setter方法。很明显,构造器中有一些不在图像中的错误。您需要在构造函数中调用setRegNo(regNo),而不是调用this.regNo=regNo。