Создание двух конструкторов с объектами, которые обращаются к другим файлам Java - PullRequest
0 голосов
/ 25 сентября 2019

Я действительно не знаю, имеет ли мой вопрос смысл, но мое задание говорит:

"Напишите третий класс StudentRecord, который имеет два атрибута: Student stu; Address addr; и два конструктора. Первыйконструктор получает объект Student и объект Address для инициализации атрибутов, второй конструктор получает имя, фамилию, идентификатор студента, gpa, адрес улицы, город, штат и почтовый индекс и используетони для инициализации атрибутов "

Я не понимаю, как именно я должен заставить два конструктора получать информацию из двух разных файлов Java.

Вот код, который у меня есть для третьего классаназванный "StudentRecord".Я не сомневаюсь, что это неверно.

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 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 null», когда я запускаю программу вместо метода toString, давая мне информацию об ученике, которую я ввел в тестовый класс.

Для тех, кто запрашивает классы Student и Address, вот вам:

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 class Address {
   private String street;
   private String city;
   private String state;
   private int zip;

   public Address(String _street, String _city, String _state, int _zip) {
      street = _street;
      city = _city;
      state = _state;
      zip = _zip;
   }

   // Accessors
   public String getStreet() {
      return street;
   }

   public String getCity() {
      return city;
   }

   public String getState() {
      return state;
   }

   public int getZip() {
      return zip;
   }

   // Mutators
   public void setStreet(String _street) {
      street = _street;
   }

   public void setCity(String _city) {
      city = _city;
   }

   public void setState(String _state) {
      state = _state;
   }

   public void setZip(int _zip) {
      zip = _zip;
   }

   // toString Method
   public String toString() {
      return String.format(getStreet() + "\n" + getCity() + ", " + getState() + " " + getZip());
   }
}

Ответы [ 3 ]

0 голосов
/ 25 сентября 2019

предлагает вам следовать приведенному ниже подходу для инициализации вашего объекта через аргументированного конструктора.

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);
   }
}

Поскольку вы уже переориентировали метод toString в классе адреса и ученика, вы получите объект.

0 голосов
/ 25 сентября 2019

Вы должны инициализировать переменные с помощью этого. {Имя переменной} = {имя переменной}.
Также часто лучше связать конструкторы в цепочку (см. Как мне вызвать один конструктор из другого в Java?), таким образом, изменения в классах, со многими конструкторами, проще реализовать.
Я бы также посоветовал переименовать ваши переменные, потому что в Java они не должны начинаться с подчеркивания (см. https://www.javatpoint.com/java-naming-conventions).

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);
   }
}
0 голосов
/ 25 сентября 2019

Ваш конструктор, как показано ниже.Пустой Конструктор не будет присваивать значения вашим переменным класса.

  public StudentRecord(String _fName, String _lName, int _id, double _gpa, String _street, String _city, String _state, int _zip){

   }

это должно быть как ниже, как упомянуто Эраном.

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,Который будет напечатан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...