【问题标题】:Setter and GetterSetter 和 Getter
【发布时间】:2020-09-08 04:04:04
【问题描述】:

所以我试图制作一个与 uber 类似的 Ride 系统。所以我试图为汽车的注册号设置一些规则。

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类的构造函数。但令人惊讶的是,当我尝试打印注册号时,它没有遵守这些规则。我添加了一张我得到的结果的图片。 enter image description here

所以如果有人知道为什么会这样,请告诉我。

【问题讨论】:

  • 你在哪里调用setRegNo方法?我猜你误解了 set 和 get 的实际工作方式。 w3schools.com/java/java_encapsulation.asp
  • 对象初始化从构造函数开始,在你的情况下,它从构造函数开始,set方法从未被调用,然后你调用get方法。
  • 请包含minimal reproducible example,以便我们了解它是如何调用的。否则它看起来不错,虽然过于复杂。你可以用一个正则表达式来做到这一点。
  • 构造函数在创建新对象时不会调用 setter 方法。很明显,您的构造函数中有一些问题不在图像中。您需要在构造函数中调用 setRegNo(regNo),而不是调用 this.regNo = regNo。

标签: java constructor getter setter


【解决方案1】:

您需要从构造函数参数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;
}

【讨论】:

    【解决方案2】:

    问题是你没有使用你已经实现的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!!!")
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 2016-02-24
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多