Использование класса Adress в классе Student с toString в java - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь создать программу, в которую вы можете добавить информацию об ученике с их адресом. Для этого я создал 2 класса, класс Student и класс Adres (голландский для адреса). В классе Adres у меня есть данные об адресе, а в Student - данные об ученике.

Но я застреваю при создании конструктора для моего класса ученика, потому что когда вы добавляете нового ученика, адрес этого ученика также должен быть добавлен.

И я пытаюсь используйте метод toString в Student, но адрес должен быть возвращен также.

Итак, у меня есть 3 вопроса:

  1. Как настроить конструктор для класса Student, где также необходимо добавить адрес
  2. Как настроить toString метод, в котором он также возвращает «toString» из адреса.
  3. Как мне ввести LocalDate и адрес при добавлении нового студента. (localdate используется для дня рождения студентов)

Я довольно новичок в java, и если бы кто-то мог мне помочь, это было бы здорово.

Мой класс Adres:

package oop3.studenten;

public class Adres {

    private String straat;
    private Integer huisnr;
    private String postcode;
    private String plaats;

    public Adres(String straat, Integer huisnr, String postcode, String plaats) {
        this.straat = straat;
        this.huisnr = huisnr;
        this.postcode = postcode;
        this.plaats = plaats;
    }


    public String toString() {
        return straat + "" + huisnr + "," + postcode + "" + plaats;
    }




    // Using regex to check if postcode is valid
    public static boolean checkPostcode(String postCode) {
        return postCode.matches("[1-9][0-9]{3}[a-zA-Z]{2}");
    }


}

Мой класс ученика:

package oop3.studenten;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Student {

    private Integer studentnr; //StudentId
    private String voornaam; //Firstname
    private String achternaam; //Lastname
    private LocalDate geboortedatum; //Birthday
    private Adres adres; //address 

    // constructor for Student
    public Student(Integer studentnr, String voornaam, String achternaam, LocalDate geboortedatum, Adres adres){
        this.studentnr = studentnr;
        this.voornaam = voornaam;
        this.achternaam = achternaam;
        this.geboortedatum = geboortedatum;
        this.adres = new Adres(); 
    }

    // toString method for Student
    @Override
    public String toString() {
        return "Student{" +
                "studentnr=" + studentnr +
                ", voornaam='" + voornaam + '\'' +
                ", achternaam='" + achternaam + '\'' +
                ", geboortedatum=" + korteGeboortedatum(geboortedatum) +
                ", adres=" + adres +
                '}';
    }

    // method to return birthday (geboortedatum) in day month year format
    public String korteGeboortedatum(LocalDate gebdatum ){
        return gebdatum.format(DateTimeFormatter.ofPattern("dd-MM-yyyy"));
        }

}

И мой основной класс, где я пытаюсь добавить студента

package oop3.studenten;


public class Main {

    public static void main(String[] args) {

        Student student = new Student(500739074, "Ronny", "Giezen", 22111997, "?"
        );
    }

}

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Студенческий конструктор:

public Student(Integer studentnr, String voornaam, String achternaam, LocalDate geboortedatum, Adres adres){
    this.studentnr = studentnr;
    this.voornaam = voornaam;
    this.achternaam = achternaam;
    this.geboortedatum = geboortedatum;
    this.adres = adres; //if you do "new Adres();" a completely empty adres instance would be created, instead you want to use the one passed as parameter
}

// toString method for Student
@Override
public String toString() {
    return "Student{" +
            "studentnr=" + studentnr +
            ", voornaam='" + voornaam + '\'' +
            ", achternaam='" + achternaam + '\'' +
            ", geboortedatum=" + korteGeboortedatum(geboortedatum) +
            ", adres=" + adres.toString() +
            '}'; //                ^^ calling the .toString()-method of adres and appending it to the rest
}

Основной класс:

public static void main(String[] args) {
    Adres adres = new Adres("Mainstreet", 5, "48484", "Amsterdam"); //creating the adress
    LocalDate birthday = LocalDate.of(2017, 1, 13);                 //creating the birthday-localdate
    Student student = new Student(500739074, "Ronny", "Giezen", birthday, adres); //passing the birthday & adres to the student-constructor
}
0 голосов
/ 27 февраля 2020

В своем основном классе вы можете сначала создать объект адреса, а затем - ученика. В Student-Constructor вы сможете передать адрес объекта.

public static void main(String[] args) {
        Address studentAddress = new Address("straat", 1, "postcode", "plaats")
        Student student = new Student(500739074, "Ronny", "Giezen", null, studentAddress);
    }
Вопрос. Вы просто вызываете свой метод toString () - метод, созданный в вашем классе адресов
@Override
    public String toString() {
        return "Student{" +
                "studentnr=" + studentnr +
                ", voornaam='" + voornaam + '\'' +
                ", achternaam='" + achternaam + '\'' +
                ", geboortedatum=" + korteGeboortedatum(geboortedatum) +
                ", adres=" + adres.toString() +
                '}';
    }
Вопрос Вы должны создать объект LocalDate и передать его в конструктор
public static void main(String[] args) {
        Address studentAddress = new Address("straat", 1, "postcode", "plaats")
        Student student = new Student(500739074, "Ronny", "Giezen", new LocalDate.now(), studentAddress); // for example
    }
...