我在理解对象方向时遇到问题-Java

时间:2018-11-05 20:44:51

标签: java

已要求我创建一个仅打印“您已注册”的类。

在第二部分中,我将创建一个测试类。测试类应创建两个学生实例(也称为对象)。然后打印它们的名称并调用它们两者的注册方法。我不断收到错误消息:“对变量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);




}

}

4 个答案:

答案 0 :(得分:4)

您的代码中有两个问题:

  • 对变量yearOfBirth的赋值无效。您正在对属性调用setter方法,但未传递任何值,因此出现警告。您应该提供一个值作为参数,并将其设置为相应的对象属性。
  • 构造函数问题是age参数的类型为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);