2014-06-13 98 views
0

我需要克隆Cell對象的2d數組,但它不能像它應該那樣工作。每當我克隆迷宮,它克隆它,但當我修改一個,它也是可見的另一個2d陣列沒有深度克隆,變化影響到兩個陣列

有人知道什麼問題是?

public void cloneMaze(boolean backup) 
{ 
    if (backup) { 
     backupMaze = (Cell[][]) maze.clone(); 
     for (int i = 0; i < maze.length; i++) { 
      backupMaze[i] = (Cell[]) maze[i].clone(); 
     } 
    } else { 
     maze = (Cell[][]) backupMaze.clone(); 
     for (int i = 0; i < backupMaze.length; i++) { 
      maze[i] = (Cell[]) backupMaze[i].clone(); 
     } 
    } 
} 
+4

請顯示「make changes」的含義。我懷疑你的意思是「maze [i] [j] .setFoo(...)」,它不是對數組的更改,而是對數組引用的對象的更改。你的副本還不是真的很深,因爲你需要克隆每個Cell。 –

+0

你在迷宮中存儲什麼?數組中的對象是否是動態的? –

+0

[對象數組的深層副本]的可能重複(http://stackoverflow.com/questions/3947227/deep-copy-of-an-object-array) – Mena

回答

1

在你備份迷宮,你需要創建newCell是首當其衝

否則,兩個你的迷宮指向同一個對象的副本,從而修改的細胞反映在迷宮中。

clone()只是你的陣列的淺拷貝,而你似乎尋找深拷貝

+0

但我如何將它們複製到一個新的細胞? – user3197307

+0

您可以在Cell中添加一個構造器拷貝,例如'Cell(Cell cell)',添加一個'clone()''方法,或者簡單地創建一個新的Cell()'並且正確設置它的所有屬性。 –

+0

不適用於新的Cell方法。我根據其他單元格屬性設置屬性,但沒有進行差異 – user3197307