Dodatnie w obiekcie listy

Dodatnie w obiekcie listy
Hshd Hdhdh
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:19
0

Witam.
Chciałbym stworzyć, aby każdy obiekt klasy student posiadał listę klasy przedmiot. Niestety nie wiem jak to rozegrać, by zrobić to w sposób prawidłowy.
Schematycznie wygląda to tak: student --> Przedmiot(lista).
Posiadam następujący kod:
Student.java

Kopiuj
public class Student implements Comparable<Student>, Serializable{
    private int NrAlbumu;
    private String imie;
    private String nazwisko;
    

    public Student(int nrAlbumu,String imie, String nazwisko) {
        this.NrAlbumu = nrAlbumu;
        this.imie = imie;
        this.nazwisko = nazwisko;
    }

    /**
     *
     * @return
     */
    @Override
    public String toString() {
        return String.format("| %d | %-12s | %-12s  |",NrAlbumu, imie, nazwisko);
    }

    public int getNrAlbumu() {
        return NrAlbumu;
    }
    
    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public void setNrAlbumu(int NrAlbumu) {
        this.NrAlbumu = NrAlbumu;
    }
    
    public void setImie(String imie) {
        this.imie = imie;
    }

    public void setNazwisko(String nazwisko) {
        this.nazwisko = nazwisko;
    }

    @Override
    public int compareTo(Student listPracownikow) {
        return nazwisko.compareToIgnoreCase(listPracownikow.nazwisko);
    }
}

StudentListModel.java

Kopiuj
public class StudentListModel extends AbstractListModel<Student>{

    List<Student> list;
    
    int point;

    public int getPoint() {
        return point;
    }

    public void setPoint(int point) {
        this.point = point;
    }
   

    public StudentListModel(List<Student> list) {
        this.list = list;
    }

    @Override
    public int getSize() {
       return list.size();
    }

    @Override
    public Student getElementAt(int index) {
        return list.get(index);
    }

    void refresh() {
        fireContentsChanged(this, 0, list.size()-1);
    }

    void addElement(Student p5) {
        list.add(p5);
        refresh();
    }
    
    void removeElement(Student p5)
    {
        list.remove(p5);
        refresh();
    }
    
    void modyficationElement(Student p5, int i)
    {
        setPoint(i);
        list.set(i, p5);
        refresh();
    }
    
    void modyficationElement(Student p5, Student praco)
    {
        list.add(p5);
        list.remove(praco);
        refresh();
    }
 
    void sortByNazwisko() {
        PracownikComparator pracownikComparator = new PracownikComparator();
        pracownikComparator.setSortBy(PracownikComparator.BYNAZWISKO) ;
        Collections.sort(list, pracownikComparator);
        refresh();
    }
    
    void sortByWynagrodzenie() {
        PracownikComparator pracownikComparator = new PracownikComparator();
        pracownikComparator.setSortBy(PracownikComparator.BYNR) ;
        Collections.sort(list, pracownikComparator);
        refresh();
    }

    public void save()
    {
        try {
            ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("pracownicy.data"));
            outputStream.writeObject(list);
            outputStream.close();
            refresh();
        } catch (IOException ex) {
            System.out.println("Wystąpił błąd zapisu");
            ex.printStackTrace();
        }
    }
    
    public void open()
    {
        try {
            ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("pracownicy.data"));
            list = (List<Student>) inputStream.readObject();
            inputStream.close();
            refresh();
        } catch (Exception ex) {
            System.out.println("Wystąpił błąd odczytu");
            ex.printStackTrace();
        }
    } 
}

AK
Co Cię powstrzymuje od dodania listy? Widzę wklejasz ten sam kod od miesiąca. A propos, to Twój kod?
Julian_
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 4 lata
  • Postów:1703
2
Kopiuj
class Student implements Comparable {

    final String id;
    final String name;
    final String surname;
    private final List<Subject> subjects;

    public Student(String id, String name, String surname, List<Subject> subjects) { 
        this.id = id;
        this.name = name;
        this.surname = surname;
        this.subjects = subjects;
    }

   @Override
    public String toString() {
        return String.format("| %d | %-12s | %-12s  |",id, name, surname);
    }

    @Override
    public int compareTo(Student s) {
        return surname.compareToIgnoreCase(s.surname);
    }

    List<Student> getSubjects() {
        return List.of(subjects.toArray(new Subject[]{}))
    }

}

class Subject {
    // ...
}
edytowany 4x, ostatnio: Julian_
AK
Co do listy w konstruktorze, są dwie szkoły, falenicka i otwocka
AK
Nie pokazałeś śmietanki, czyli odpowiednich geterów/getera. Tam widać jakość designu (lub widać, ze jej nie ma)
AK
Dobra. Nie dałeś się, żeby Ci wyciekła cała lista w geterze :) Ale wycieka (bo chyba można tak powiedzieć) w konstruktorze. Przynajmniej jeśli myslimy koszernym immutabilizmem,
Hshd Hdhdh
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:19
0

Stworzyłem. Jak teraz teraz się odwołać,aby dodać element ?

Hshd Hdhdh
nazwaObiektu.subjects.add(...); niestety nie chce zadziałać.
AK
TO ZALEŻY. Klasa na pierwszy (i drugi rzut też) oka wygląda jak niezmiennicza. Więc ZALEŻY od założeń, które być może tzreba opisać, lub wyrazić czystym kodem. Jakim tokiem myślisz, nie wiadomo, bo nie dałeś zmienionego kodu.
AK
Jeśli podważyć niezmienniczość klasy, ja bym dodał metodę Add
Hshd Hdhdh
Klasa będzie stała, będzie posiadać tylko nazwę przedmiotu. W późniejszym czasie chcę stworzyć listę ocen dla tych przedmiotów.
Charles_Ray
@AnyKtokolwiek: to chyba nie jest jeszcze ten poziom, żeby mówić o niemutowalności xD
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:27 minut
  • Postów:1875
1

Kolego, ale lekcja z enkapsulacji nie odrobiona. Brak niemutowalności jestem w stanie zrozumieć, ale odwoływanie się do pola klasy po kropce O_o


”Engineering is easy. People are hard.” Bill Coughran
Hshd Hdhdh
Możesz polecić jakiś kurs ?
Charles_Ray
Jakikolwiek kurs, który dotyka tematyki programowania obiektowego np. w Javie :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.