【发布时间】:2015-05-28 13:26:04
【问题描述】:
我在深度复制方面遇到了一些麻烦。 我有这个java项目,国际象棋,我需要使用clone()方法,因为我需要在不改变棋盘的情况下尝试新的配置。
Board scacchiera = new Board();
Initialization(scacchiera);
Board clone = scacchiera.clone();
System.out.println(scacchiera.toString());
System.out.println(clone.toString());
我创建一个对象 scacchiera,然后克隆它。我认为我已经正确地完成了深层复制,但是当我在 scacchiera 中更改某些内容时,克隆也会更改。 在对象板中:
public class Board implements Cloneable{
//TODO
//rivedere se check e checkmate public o private;
//se private, costruire get e set;
public Pedine[][] board;
public boolean check;
public boolean checkmate;
//creating 2 lists for all the pieces; Neri=black, Bianchi=White
public ArrayList<Pedine> Neri;
public ArrayList<Pedine> Bianchi;
public Board(){
this.board = new Pedine [8][8];
this.check = false;
this.checkmate = false;
this.Neri = new ArrayList<Pedine>();
this.Bianchi = new ArrayList<Pedine>();
}
...
@Override
public Board clone() throws CloneNotSupportedException{
Board cloned = (Board) super.clone();
cloned.board = (Pedine[][]) board.clone();
return cloned;
}
我有这个 Pedin 的双数组,我也必须克隆它,所以我这样做了:
public class Pedine implements Cloneable{
private int x;
private int y;
private Piece pezzo;
private Colour colore;
...
@Override
public Pedine clone() throws CloneNotSupportedException{
return (Pedine) super.clone();
}
为什么它不起作用?
我也试过这个代码,但它不起作用。
@Override
public Board clone() throws CloneNotSupportedException{
Board cloned = (Board) super.clone();
cloned.board = (Pedine[][]) board.clone();
for (int i=0; i<8; i++)
for(int j=0; j<8; j++){
cloned.board[i][j] = board[i][j].clone();
}
return cloned;
}
(Pedine 扩展对象)
【问题讨论】:
-
Pedine 的超类是什么?是对象吗?
-
什么是
Piece?Colour是什么?它们都是枚举(应该是)还是不同的东西? -
是的,两个枚举。这是存储库中的所有内容