做一個關于對象數組的問題,需要對對象數組進行分階段的修改,但是目前階段判斷的依據是目前的對象數組的情況,如果邊判斷邊修改會影響判斷結果,比如 假設對象數組 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内容的過程中就不會出現問題,但是在每一次将資料周遊一遍後,新的一遍又要重複上述複制過程,感覺效率很低。不知道有沒有比較快捷的方法,望指點。