我的课程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)
答案 0 :(得分:1)
我认为Arrays.copyOf
工作正常。在打印a2.zmienInformacje("Tove", "Jansson", 1956);
之前,您正在更新Author a2
的问题符合Book b2 and b3
。