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

Tworzenie listy w kontruktorze - JAVA

+2 głosów
70 wizyt
pytanie zadane 15 marca w Java przez blofeld Użytkownik (640 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 przez Wiciorny Ekspert (221,970 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 przez blofeld Użytkownik (640 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 przez Wiciorny Ekspert (221,970 p.)
edycja 15 marca 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ź 51 wizyt
pytanie zadane 2 maja w Java przez blofeld Użytkownik (640 p.)
0 głosów
2 odpowiedzi 546 wizyt
pytanie zadane 9 października 2018 w Java przez KlemensGak Obywatel (1,430 p.)
0 głosów
2 odpowiedzi 2,169 wizyt
pytanie zadane 22 listopada 2016 w Java przez itcloud Gaduła (3,380 p.)

88,355 zapytań

136,952 odpowiedzi

305,669 komentarzy

58,619 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...