已要求我创建一个仅打印“您已注册”的类。
在第二部分中,我将创建一个测试类。测试类应创建两个学生实例(也称为对象)。然后打印它们的名称并调用它们两者的注册方法。我不断收到错误消息:“对变量yearOfBirth的赋值无效”,而在测试类中,“构造函数字符串未定义”。
您能帮助我理解代码中的错误吗?
public class Student{
//Attributes
private String name;
private String gender;
private int yearOfBirth;
//Constructors
public Student (String name, String gender, int yearOfBirth){
this.name = name;
this.gender = gender;
this.yearOfBirth = yearOfBirth; // Default age of new student
}
public Student (String name, String gender){
this.name = name;
this.gender = gender;
this.yearOfBirth = 0;
}
//Getters & Setters
public String getName() {
return name; }
public void setName (String name) {
this.name = name;
}
public String getGender () {
return gender;
}
public void setGender (String gender) {
this.gender = gender;
}
public int getYearOfBirth() {
return yearOfBirth;
}
public void setYearOfBirth() {
if(yearOfBirth >= 0 && yearOfBirth <= 100) {
this.yearOfBirth = yearOfBirth;
}else {
System.out.println("Age not valid");
}
}
// Other Methods
public void Registered() {
System.out.println(name + "You have been registered");
}
}
public class StudentTest {
public static void main(String[] args) {
Student student1 =new Student("Kevin Sanches", "male", "1972");
Student student2 = new Student("Cameron Young", "male", "1993");
student1.Registered();
student2.Registered();
System.out.println(student1);
System.out.println(student1);
}
}
答案 0 :(得分:4)
您的代码中有两个问题:
int
,而不是在构造对象时将age作为字符串传递。答案 1 :(得分:2)
您的构造函数需要两个字符串和一个整数作为参数。您正在传递三个字符串。
正确的方法:
Student student1 =new Student("Kevin Sanches", "male", 1972);
Student student2 = new Student("Cameron Young", "male", 1993);
此外,在方法setYearOfBirth
中,您忘记了将yearOfBirth
作为参数传递。
public void setYearOfBirth(int yearOfBirth) {
if(yearOfBirth >= 0 && yearOfBirth <= 100) {
this.yearOfBirth = yearOfBirth;
}else {
System.out.println("Age not valid");
}
}
答案 2 :(得分:0)
您正在尝试发送3个String
,而您的构造函数都没有准备好使用它们。您有一个具有2个String
和一个int
的构造函数,因此创建对象的正确方法是,
Student student1 = new Student("Kevin Sanches", "male", 1972);
没有双引号1972
将是int
。
答案 3 :(得分:0)
您正在将setter中的this.yearOfBirth
分配给this.yearOfbirth
。即使代码从技术上来说只是this.yearOfBirth = yearOfBirth;
,它们都是this.yearOfBirth
变量。
需要通过接受值并将其分配为以下方式进行更改:
public void setYearOfBirth(int yearOfBirth) {
if(yearOfBirth >= 0 && yearOfBirth <= 100) {
this.yearOfBirth = yearOfBirth;
}else {
System.out.println("Age not valid");
}
}
您正试图将String值传递给可以接受yearOfBirth值的int的构造函数,将其更改为:
Student student1 =new Student("Kevin Sanches", "male", 1972);
Student student2 = new Student("Cameron Young", "male", 1993);