-2

Book多くの を持つことができるクラスがありAuthorsます。Authorクラスのいくつかのオブジェクトをクラスのコンストラクターに渡しBook、これらのオブジェクトをコピーしますが、オブジェクトの外部のデータArrays.copyOFを変更すると、どこでも変更されるため、コピーが作成されていないことを意味します。Author

ディープコピーを作成したいと思います。コードはエラーなしでコンパイルおよび実行されています。

import java.util.Arrays;

public class Book {
    private String tytul;
    private int rokWydania;
    private Author[] autorzy;

    public Book(String tytul, int rokWydania, Author... autorzy) {
        this.tytul = tytul;
        this.rokWydania = rokWydania;
        this.autorzy = Arrays.copyOf(autorzy, autorzy.length);
    }

    public String toString() {
        String s = "      Tytuł: " + tytul +"\nrok wydania: " + rokWydania + "\n";
        if(autorzy.length == 1)
            s+="      Autor: " + autorzy[0];
        else{
            s+="    Autorzy: " + autorzy[0];
            for(int i = 1; i < autorzy.length; i++)
                s+="\n             " + autorzy[i];
        }       
        return s + "\n\n";
    }

    public static void main(String[] args) {
        Author a1 = new Author("Isabel", "Allende", 1942);
        Author a2 = new Author("Manueala", "Gretkowska", 1964);
        Author a3 = new Author("Piotr", "Pietucha", 1954);

        Book b1 = new Book("Suma naszych dni", 2010, a1);
        Book b2 = new Book("Polka", 2001, a2);
        Book b3 = new Book("Sceny z życia pozamałżeńskiego", 2003, a2, a3);

        a2.zmienInformacje("Tove", "Jansson", 1956);
        Book b4 = new Book("Lato muminków", 2006, a2);

        System.out.println(b1);

        System.out.println(b2);

        System.out.println(b3);

        System.out.println(b4);
    }
}

public class Author {
    private String imie, nazwisko;
    private int rokUrodzenia;

    public Author(String imie, String nazwisko, int rokUrodzenia) {
        this.imie = imie;
        this.nazwisko = nazwisko;
        this.rokUrodzenia = rokUrodzenia;
    }

    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public int getRokUrodzenia() {
        return rokUrodzenia;
    }

    @Override
    public String toString() {
        return  imie + " " + nazwisko + " (ur. " + rokUrodzenia + ")";
    }

    public void zmienInformacje(String imie, String nazwisko, int rokUrodzenia) {
        this.imie = imie;
        this.nazwisko = nazwisko;
        this.rokUrodzenia = rokUrodzenia;

    }

}

望ましい出力:

     Tytuł: Suma naszych dni
  rok wydania: 2010
        Autor: Isabel Allende (ur. 1942)


        Tytuł: Polka
  rok wydania: 2001
        Autor: Manuela Gretkowska (ur. 1964)


        Tytuł: Suma naszych dni
  rok wydania: 2010
      Autorzy: Manuela Gretkowska (ur. 1964)   
               Piotr Pietucha (ur. 1954)


        Tytuł: Lato muminków
  rok wydania: 2006
        Autor: Tove Jansson (ur. 1956)

私の出力

      Tytuł: Suma naszych dni
rok wydania: 2010
      Autor: Isabel Allende (ur. 1942)


      Tytuł: Polka
rok wydania: 2001
      Autor: Tove Jansson (ur. 1956)//WRONG


      Tytuł: Sceny z życia pozamałżeńskiego
rok wydania: 2003
    Autorzy: Tove Jansson (ur. 1956)//WRONG
             Piotr Pietucha (ur. 1954)


      Tytuł: Lato muminków
rok wydania: 2006
      Autor: Tove Jansson (ur. 1956)
4

1 に答える 1

1

Arrays.copyOfうまく機能していると思います。問題は印刷前にa2.zmienInformacje("Tove", "Jansson", 1956);更新中です。Author a2Book b2 and b3

于 2013-05-19T20:00:17.963 に答える