Tablica obiektów w obiekcie

0

Witam wszystkich,
Jestem nowy w temacie - dopiero co zacząłem przygodę z javą.
Mam następujące zadanie i męczę się z nim już 2 dni.
->JPG.

Nie mam pojęcia jak utworzyć tablicę(tabele) obiektów Film w obiekcie Actor.
Niestety, nie mogę liczyć na pomoc z innych źródeł, więc zwracam się do Was.
Bardzo proszę o wskazówki używając prymitywnego kodu (początkujący).

Z góry dziękuję i przepraszam, jeżeli kogoś urażę trywialnością problemu.

0

Tutaj mamy dla przykładu klasę Film zgodnie z tym co jest na diagramie UML.


package techstyle;


public class Film {
    private String name;
    private String code;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public Film(String name) {
        this.name = name;
        //tutaj dopracuj code jak powinno wyglądać
    }

    @Override
    public String toString() {
        return "Film{" + "name=" + name + ", code=" + code + '}';
    }
    public void print(){
        // napisz metodę
    }
}

A tutaj klasa Autor, która implementuje tablice Filmów:

package techstyle;

public class Actor {
    private String name;
    private String addres;
    private int age;
    private Film[] myFilm;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddres() {
        return addres;
    }

    public void setAddres(String addres) {
        this.addres = addres;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Film[] getMyFilm() {
        return myFilm;
    }

    public void setMyFilm(Film[] myFilm) {
        this.myFilm = myFilm;
    }

    @Override
    public String toString() {
        return "Actor{" + "name=" + name + ", addres=" + addres + ", age=" + age + ", myFilm=" + myFilm + '}';
    }

    public Actor(String name, String addres) {
        this.name = name;
        this.addres = addres;
        //określasz tutaj rozmiar tablicy filmy i wiek autora
    }
    
}

0

Dzięki!
Do tej pory miałem coś bardzo podobnego...
Problem zaczyna się przy definiowaniu tablicy dla każdego z dwóch obiektów klasy Actor po wygenerowaniu obiektów klasy Film
Czy mam to zrobić w klasie głównej? Oto i ona dotychczas:
'''
public MainTest {

public static void main(String[] args) {

	Film film1 = new Film("Wolf", "W"); // (name, code)
	Film film2 = new Film("As good as it gets","AS");
	Film film3 = new Film("One flew over the Cuckoo's Nest","1F");
	Film film4 = new Film("The America", "TA");
	Film film5 = new Film("Ghost Rider: Spirit of the Vengance","GR");
	Film film6 = new Film("Barah Aanan","BA");

	
	Actor Actor1 = new Actor("Jack Nicolson", "Miami", 74);
	Actor Actor2 = new Actor("Violante Placido", "Bologna", 38);
	
	System.out.println(film1);
	System.out.println(film2);
	System.out.println(Actor1);
	System.out.println(Actor2);

}
}
'''

Jak utworzyć tablice 3-elementowe dla każdego z obiektów Actor?
Jak przypisać film1, film2, film3 do tablicy Actor1 ?
Jak przypisać film4, film5, film6 do tablicy Actor2?

Dodam, constructor klasy Actor składaa się tylko z parametrów (name,address,age)

1

Ad1)
W konstruktorze określasz rozmiar tablicy np dla 3 elementów:

    public Actor(String name, String addres, int age) {
        this.name = name;
        this.addres = addres;
        this.age = age;
        this.myFilm= new Film[3];
    }

Ad2) Przez referencję a dokładnie metodę getMyFilm np:

Actor1.getMyFilm()[0]=film1;
0
Film[] actorFilms1=new Film[3];
actorFilms1[0]=film1;
actorFilms1[1]=film2;
actorFilms1[2]=film3;
Actor1.setMyFilm(actorFilms1);
0

Kontynuując...
Mam klasę główną:

public class MainTest {

	public static void main(String[] args) {

		Film film1 = new Film("Wolf", "W");
		Film film2 = new Film("As good as it gets","AS");
		Film film3 = new Film("One flew over the Cuckoo's Nest","1F");
		Film film4 = new Film("The America", "TA");
		Film film5 = new Film("Ghost Rider: Spirit of the Vengance","GR");
		Film film6 = new Film("Barah Aanan","BA");
		
		Actor Actor1 = new Actor("Jack Nicolson", "Miami", 74);
		Actor Actor2 = new Actor("Violante Placido", "Bologna", 38);
		
		
		Actor1.getMyFilm()[0]=film1;
		Actor1.getMyFilm()[1]=film2;
		Actor1.getMyFilm()[2]=film3;
		
		Actor2.getMyFilm()[0]=film4;
		Actor2.getMyFilm()[1]=film5;
		Actor2.getMyFilm()[2]=film6;
		
		System.out.println(Actor1);
		System.out.println(Actor2);
		
}
}

...klasę Actor:

public class Actor {

	private String name;
	private String address;
	private int	age;
	private Film[] myFilm;
		
	 public Actor(String name, String address, int age) {
			this.name=name;
			this.address=address;
			this.age=age;
			this.myFilm=new Film[3];
	}
	
	public Actor() {
	}

	public void setName(String name){
		this.name=name;
	}
	public void setAddress(String address) {
		this.address=address;
	}
	public void setAge(int age) {
		this.age=age;
	}
	public void setMyFilm(Film[] myFilm) {
        this.myFilm = myFilm;
	}
	public String getName(){
		return name;
	}
	 public String getAddress() {
	    return address;
	}
	 public int getAge() {
        return age;
	} 
	 public Film[] getMyFilm() {
	        return myFilm;
	}
	
	 public String toString() {
	        return "Actor {" + name +", "+  address+", " + age+")"+ "\n" + myFilm;
	}

	}

...oraz klasę Film


	String name;
	String code;
	
	public Film(String name, String code) {
		this.name=name;
		this.code=code;
	}

	public void setName(String name) {
		this.name=name;
	}
	public void setCode(String code) {
		this.code=code;
	}
	public String getName(String name) {
		return name;
	}
	
	public String getCode(String code) {
		return code;
	}
	
	public String toString() {
		return (this.name + "\t" + this.code);
	}
	public void print() {
		System.out.println(name);
		System.out.println(code);
	}
}

przywołanie System.out.println(Actor1); powoduje wydruk danych obiektu, niestety nie drukuje informacji o obiektach klasy Film znajdujących się w tabeli myFilm - zamiast tego drukuje lokacje tej tabeli w buforze...Nie potrafię utworzyć metody toString w klasie Actor, drukujacej (również) danych z tabeli Film[] myFilm, czyli nazwy danego filmu i jego kodu (np. "Wolf" "W")
W efekcie chce uzyskać:
Actor {Jack Nicolson, Miami, 74)
Wolf W
As good as it gets AS
One flew over the Cuckoo's Nest 1F

Z góry dziękuję raz jeszcze.

1

A więc klasa Actor została zmodyfikowana :

public class Actor {
    private String name;
    private String address;
    private int age;
    private Film[] myFilm;

     public Actor(String name, String address, int age) {
            this.name=name;
            this.address=address;
            this.age=age;
            this.myFilm=new Film[3];
    }

    public Actor() {
    }

    public void setName(String name){
        this.name=name;
    }
    public void setAddress(String address) {
        this.address=address;
    }
    public void setAge(int age) {
        this.age=age;
    }
    public void setMyFilm(Film[] myFilm) {
        this.myFilm = myFilm;
    }
    public String getName(){
        return name;
    }
     public String getAddress() {
        return address;
    }
     public int getAge() {
        return age;
    } 
     public Film[] getMyFilm() {
            return myFilm;
    }

     public String toString() {
         StringBuilder sb= new StringBuilder();
         for(int i=0;i<myFilm.length;i++){
             sb.append(myFilm[i].toString()).append("\n");
         }
            return "Actor {" + name +", "+  address+", " + age+")"+ "\n"+sb.toString();
    }

}

Jak zauważyłeś w metodzie toString mamy pętle która wykonuje się po wszystkich elementach tablicy, a zmienna sb, pobiera te wszystkie łańcuchy znaków
Teraz klasa


public class Film {
    private String name;
    private String code;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public Film(String name) {
        this.name = name;
    }

    public Film(String name, String code) {
        this.name = name;
        this.code = code;
    }
    

    @Override
    public String toString() {
        return name+" " + code;
    }
    public void print(){
        System.out.println(toString());
    }
}

Tutaj uległa zmianie także metoda toString();
metoda główna pozostała bez zmiany

0

Dziękuję, wszystko gra. Wracam do nauki...

1 użytkowników online, w tym zalogowanych: 0, gości: 1