使用调用其他java文件的对象创建两个构造函数
我真的不知道我的问题是否有意义,但我的任务是: “编写第三个类StudentRecord,它有两个属性: 学生斯图; 地址地址; 和两个构造函数。第一个构造函数被赋予一个学生对象和一个地址对象来初始化属性。第二个构造函数被赋予一个名字、姓氏、学生ID、gpa、街道地址、城市、州和zipcode,并使用它们来初始化属性“ 我不明白我应该如何让两个构造函数从两个不同的java文件中获取信息 这是我为第三个名为“StudentRecord”的类编写的代码。 我毫不怀疑这是错误的使用调用其他java文件的对象创建两个构造函数,java,Java,我真的不知道我的问题是否有意义,但我的任务是: “编写第三个类StudentRecord,它有两个属性: 学生斯图; 地址地址; 和两个构造函数。第一个构造函数被赋予一个学生对象和一个地址对象来初始化属性。第二个构造函数被赋予一个名字、姓氏、学生ID、gpa、街道地址、城市、州和zipcode,并使用它们来初始化属性“ 我不明白我应该如何让两个构造函数从两个不同的java文件中获取信息 这是我为第三个名为“StudentRecord”的类编写的代码。 我毫不怀疑这是错误的 public clas
public class StudentRecord {
Student stu;
Address addr;
public StudentRecord() {
Student stu;
Address addr;
}
public StudentRecord(String _fName, String _lName, int _id, double _gpa, String _street, String _city, String _state, int _zip){
}
public String toString() {
return String.format(stu + "\n" + addr);
}
}
这是我为TestStudentRecord类编写的代码,我得到的只是
当我运行程序时“null”
public class TestStudentRecord {
public static void main(String[] args) {
StudentRecord stu1 = new StudentRecord("Jane", "Brown", 182765, 2.333, "13 Flower St.", "Pulteneyville", "NY", 14386);
System.out.println(stu1);
}
}
当我运行这个程序时,我得到的只是“null”,而不是toString方法,它提供了我在测试类中键入的学生信息
对于那些要求学生和地址课程的人,请看:
public class Student {
// attributes of a Student
private String firstName;
private String lastName;
private int studentId;
private double gpa;
/**
* Student constructor.
* @param _fName student's first name
* @param _lName student's last name
* @param _id student's id number
* @param _gpa students GPA
*/
public Student(String _fName, String _lName, int _id, double _gpa) {
firstName = _fName;
lastName = _lName;
studentId = _id;
gpa = _gpa;
}
/**
* getFirstName - Accessor for first name
* @return the student's first name
*/
public String getFirstName() {
return firstName;
}
/**
* getLastName - Accessor for last name
* @return the student's last name
*/
public String getLastName() {
return lastName;
}
/**
* getId - Accessor for ID
* @return the student's ID
*/
public int getStudentId() {
return studentId;
}
/**
* getGpa - Accessor for gpa
* @return the student's gpa
*/
public double getGpa() {
return gpa;
}
/**
* setFirstName - Mutator for first name
* @param the new first name
*/
public void setFirstName(String _fName) {
firstName = _fName;
}
/**
* setLastName - Mutator for last name
* @param the new last name
*/
public void setLastName(String _lastName) {
lastName = _lastName;
}
/**
* setStudentId - Mutator for ID
* @param the new ID
*/
public void setStudentId(int _id) {
studentId = _id;
}
/**
* setGpa - Mutator for gpa
* @param the new gpa
*/
public void setGpa(double _gpa) {
gpa = _gpa;
}
// toString Method
public String toString() {
return String.format(getLastName() + ", " + getFirstName() + "\n" + "ID: " + getStudentId() + " GPA: %3.1f", getGpa());
}
}
您的构造函数如下所示。空构造函数不会为类变量赋值
public StudentRecord(String _fName, String _lName, int _id, double _gpa, String _street, String _city, String _state, int _zip){
}
正如Eran所提到的,它应该如下所示
public StudentRecord(String _fName, String _lName, int _id, double _gpa, String _street, String _city, String _state, int _zip){
this.stu = new Student(_fName, _lName, _id, _gp);
this.addr = new Address(_street, _city, _state, _zip);
}
现在,您的toString将具有stu和addr的值。将被打印。建议您遵循以下方法,通过有争议的构造函数初始化您的对象
public class StudentRecord {
Student stu;
Address addr;
public StudentRecord() {
Student stu;
Address addr;
}
public StudentRecord(String _fName, String _lName, int _id, double _gpa, String _street, String _city, String _state, int _zip){
this.stu = new Student(_fName, _lName, _id, _gpa);
this.addr=new Address(_street,_city,_state,_zip);
}
public String toString() {
return String.format(stu + "\n" + addr);
}
}
由于您已经在address和student类中跳过了toString方法,因此您将获得对象。您必须使用此方法初始化变量。{variable name}={variable name}。
此外,通常最好将构造函数链接起来(请参阅),通过这种方式,类中的更改以及许多构造函数更容易实现。
我还建议重命名变量,因为在Java中变量不应该以下划线开头(请参阅)
您的构造函数
StudentRecord(String\u fName、String\u lName、int\u id、double\u gpa、String\u street、String\u city、String\u state、int\u zip)
的主体为空。它应该将相关参数分配给类的相关实例变量。您没有在构造函数中执行任何操作。您期望什么?想想Student
的构造函数,当StudentRecord
用属于Student
的值初始化时,您能调用它吗?如果在Student
中没有参数化构造函数,那么至少可以调用getter和setter。主要提示:您也必须初始化StudentRecord
的类属性,这些属性也是对象,并且具有构造函数、getter和setter…您能否也共享student和Address类,以便我们为您提供完整的解决方案。此外,根据您的代码,您没有通过有争议的承包商初始化您的地址和学生班级。这是你需要做的。
public class StudentRecord {
Student stu;
Address addr;
public StudentRecord() {
Student stu;
Address addr;
}
public StudentRecord(String _fName, String _lName, int _id, double _gpa, String _street, String _city, String _state, int _zip){
this.stu = new Student(_fName, _lName, _id, _gpa);
this.addr=new Address(_street,_city,_state,_zip);
}
public String toString() {
return String.format(stu + "\n" + addr);
}
}
public class StudentRecord {
Student student;
Address addr;
public StudentRecord(Student student, Address addr) {
this.student = student;
this.addr = addr;
}
public StudentRecord(String fName, String lName, int id, double gpa, String street, String city, String state, int zip){
this(new Student(fName, lName, id, gpa),
new Address(street,city,state,zip));
}
public String toString() {
return String.format(student + "\n" + addr);
}
}