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。