天天看點

java指派兩個對象數組 clone_Java:類的兩個相同對象數組的克隆問題

做一個關于對象數組的問題,需要對對象數組進行分階段的修改,但是目前階段判斷的依據是目前的對象數組的情況,如果邊判斷邊修改會影響判斷結果,比如 假設對象數組 grid[][]如下 gridOld[][] = grid[][]

a b c d

b c d a

如果一個位置相鄰(上下左右四個方向)的和它自己都不一樣,那麼變成數量多的那個,有一樣的就不變

現在第一行的 a 下一次應該變為b ,第一行的b下一次應該變為c

如果判斷是根據gridOld而修改的是grid,因為“=”是相當于引用,是以修改grid也會影響gridOld,調試時可以看到他們指向相同一塊記憶體

是以結果就是 a 下一次是b,而b下一次還是b,因為原來的第一個a已經被修改為b了

原來試過clone()方法,但是由于時間緊迫,不知道是用法不對還是需要重寫,在對象數組克隆時情況和直接用等号相同,是以後來就自己寫了一個比較無奈的周遊重建對象數組的方法。

//cells和cellOld是Cell[sizeGrid][sizeGrid]的二維數組

double random;

for(int i = 0; i

for(int j = 0; j

if(cells[i][j] instanceof MutatedCell){//判斷目前格子是三種情況的哪一種

MutatedCell mC = new MutatedCell();//建立一個同類型對象

cellOld[i][j]=mC;//指派給cellOld中對應位置

}else if(cells[i][j] instanceof NormalCell){

NormalCell nC = new NormalCell();//如果帶可變的屬性,需要在把屬性指派給建立的對象

nC.setstamina(((NormalCell) cells[i][j]).getstamina());//保持兩個對象内容相同

cellOld[i][j]=nC;

}else if(cells[i][j] instanceof DeadCell){

DeadCell dC = new DeadCell();

cellOld[i][j]=dC;

}

}

}

在接下來的根據cellOld的判斷而修改cells内容的過程中就不會出現問題,但是在每一次将資料周遊一遍後,新的一遍又要重複上述複制過程,感覺效率很低。不知道有沒有比較快捷的方法,望指點。