• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzenie listy w kontruktorze - JAVA

Object Storage Arubacloud
+2 głosów
161 wizyt
pytanie zadane 15 marca 2022 w Java przez blofeld Użytkownik (700 p.)

Hej.

Drodzy hakerzy,

Pomóżcie proszę głupszemu koledze.

Uczę się agregacji i kompozycji w konstruktorach.

Za zadanie mam stworzyć program przechowujący filmy.

No więc potworzyłem klasy Director, RelaseDate, Genre i Actor.

Teraz w klasie Movie tworzę ich pola i chcę, żeby konstruktor klasy Movie tworzył listę Aktorów.

Stworzyłem więc w klasie Movie listę ArrayList<Actor> list.

Nie mam jednak głowy jak uzupełniać ją przy konstruktorze w klasie Movie :-/

Przy każdym filmie chcę dodawać inną liczbę aktorów.

Obecnie mam coś takiego, wywala na czerwono i nie potrafię tego przeskoczyć :-)

import java.util.ArrayList;

public class Movie {

    private String title;
    private Director director;
    private ArrayList<Actor> list;
    private Genre genre;
    private RelaseDate relaseDate;

    public Movie(String title, Director director, ArrayList<Actor> list,
                 Genre genre, RelaseDate relaseDate) {
        this.title = title;
        this.director = director;
        this.list = new ArrayList<>();
        this.genre = genre;
        this.relaseDate = relaseDate;
    }

    public static void main(String[] args) {

        new Movie("Matrix",new Director("Larry","Wachowski"),
                 new ArrayList<>().add(new Actor("Keanu","Reeves"),(new Actor("Hugo","Weaving")),
                 Genre.SIFI, new RelaseDate(1999));
    }
}

 

1 odpowiedź

+2 głosów
odpowiedź 15 marca 2022 przez Wiciorny Ekspert (269,710 p.)
public Movie(String title, Director director, ArrayList<Actor> list,
                 Genre genre, RelaseDate relaseDate) {
        this.title = title;
        this.director = director;
        this.list = new ArrayList<>();
        this.genre = genre;
        this.relaseDate = relaseDate;
    }

Podajesz liste jako argument, a tworzysz pustą, przypisując zmienna 

// this odwoluje sie do pola klasy 
this.list = new ArrayList<>();

tutaj do pola klasy przypisujesz pustą listę a nie tę, którą wysyłasz/przekazujesz jako argument 

 ArrayList<Actor> list // to jest twój argument 

więc powinieneś zapisać to w taki sposób 

this.list = list; // sugeruje zmienic nazwe pola klasy na actors np. 

Na sam koniec zmień jeszcze pole listy jako  ( że nie jest ono STATYCZNE, TYLKO DOTYCZY OBIEKTU ) każdy obiekt będzie miał własną listę, więc przydziel miejsce na stercie 
 

private ArrayList<Actor> list = new ArrayList<Actor>();

Ale jeszcze na sam koniec możesz zrobić coś takiego - czyli zostawić to co masz i tworzyć nową listę z przekazaniem tej w argumencie 
 

this.list = new ArrayList<Actor>(list); // jednak nie polecam 

 

komentarz 15 marca 2022 przez blofeld Użytkownik (700 p.)

Wielkie dzięki :-)

Prawie działa :-D

A jak wtedy dodaję kolejne elementy w konstruktorze do listy ?

Pokazuje, że nie mogę użyć actors ze względu na niestatyczne pole :-)

 

1
komentarz 15 marca 2022 przez Wiciorny Ekspert (269,710 p.)
edycja 15 marca 2022 przez Wiciorny

no bo nie masz czegoś takiego jak actors w danym momencie. metoda statyczna  ładuje się jako pierwsza. Musisz otworzyć obiekt najpierw, albo utworzyć listę i dopiero do niej dodać 
 

// jedna z możliwości to co wczesniej 
 public static void main(String[] args) {
 
        new Movie("Matrix",new Director("Larry","Wachowski"),
                 new ArrayList<>().add(new Actor("Keanu","Reeves"),(new Actor("Hugo","Weaving")),
                 Genre.SIFI, new RelaseDate(1999));
    }

jednak w twoim kodzie jest błąd więc jeśli chcesz dodać elementy po sobie to napisz coś takiego 
 

new ArrayList<String>() {
            {
                add("element"); // tylko oczywiscie jako new Actor();
                add("element2");
                add("element3");
            }

to co jest elementem twojej klasy, nie jest widoczne dla metody statycznej main, jest prywatne, to jest częścią obiektu. 

Zapoznaj się z podstawami programowania obiektowego. Polecam https://helion.pl/ksiazki/java-podstawy-wydanie-x-cay-s-horstmann,javp10.htm#format/e

Podobne pytania

0 głosów
1 odpowiedź 131 wizyt
pytanie zadane 2 maja 2022 w Java przez blofeld Użytkownik (700 p.)
+1 głos
1 odpowiedź 131 wizyt
0 głosów
2 odpowiedzi 839 wizyt
pytanie zadane 9 października 2018 w Java przez KlemensGak Bywalec (2,210 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...