我有兩個2D詮釋數組對象,名爲: originalMap和rendedMap,它們包含與謎題遊戲地圖對應的數字。 從線程類我從類調用Puzzle.java獲取地圖數組並修改一個。線程遊戲循環中的圖形渲染。更改數組上的數據
int [][] rendedMap = Puzzle.getRendedMap().getMap();
int [][] originalMap = Puzzle.getMapObj().getMap();
這是我的線程循環:
drawPuzzle(帆布,地圖);需要畫布和陣列並繪製地圖。
while(running){
if(!holder.getSurface().isValid())
continue;
canvas = holder.lockCanvas();
if(runSolution && movements.size()>0){
executeSolution();
drawPuzzle(canvas, rendedMap);
if(finished){//checks if the execution finished
runSolution=false;
}
if(message.equals("No more actions") ||
message.equals("Out of bounds, try again!")){
System.out.println(message);
drawPuzzle(canvas, originalMap);
}
}else{
drawPuzzle(canvas, originalMap);
}
drawMovements(canvas);
holder.unlockCanvasAndPost(canvas);
}
}
這是我修改數組的方法:
public void executeSolution(){
numOfPlanets = 2;
for(int x=0;x<rendedMap.length-1; x++){
for(int y=0;y<rendedMap[x].length-1; y++){
//Checks where the robot is and saves its initial position
if(rendedMap[x][y]>=7 && rendedMap[x][y]<=9){
initX=x; initY=y; initial=true;
System.out.println("Initial X: "+initX +" Y: "+initY);
direction = rendedMap[x][rendedMap[x].length-1];
System.out.println("Direction: "+direction);
}
}//end inner for
}//end for
if(movements.size()>0){
for(int i=0; i<movements.size();i++){
if(movements.get(i).getColour().equals("none")){
if(movements.get(i).getMotion().equals("straight")){
if(direction==RIGHT){
if(rendedMap[initX][initY+1]==0){
finished=true;
message = "Out of bounds, try again!";
return;
}else{
rendedMap[initX][initY+1]= rendedMap[initX][initY+1]+6;
rendedMap[initX][initY]=rendedMap[initX][initY]-6;
}
}
}//action if
}//color if
}//movements for loop
if(numOfPlanets > 0){
finished = true;
message ="No more actions";
}
}//movements if statement
}
我的問題是,當我渲染某種原因originalMap變化以及與renderMap陣列時,我試圖退原始地圖它不會改變。 我甚至打印出來並逐行檢查,它們是一樣的。
什麼可能會導致這種情況?我花了幾天的時間來弄清楚。
做'Puzzle.getRendedMap()的GetMap();'和'Puzzle.getMapObj()的GetMap();'返回相同的2D數組,還是他們不同?有可能你的'rendedMap'和'originalMap'數組引用了同一個對象。 –
實際上在拼圖類我創建2類不同的對象的類地圖, 和我分配相同的2D陣列上。 因此,在線程類中,我從地圖對象中獲取地圖數組,但實際上它們具有相同的數據。 – cotsios
然後我認爲那是你的問題。當您通過使用int [] [] rendedMap = Puzzle.getRendedMap()。getMap();和int [] [] originalMap = Puzzle.getMapObj()。getMap();'你不是複製數組,但只是引用它們。因此,由於它們都引用相同的數組,所以在一個數組中進行的任何更改都會影響另一個數組。嘗試爲每個Map對象創建一個單獨的2d數組,或者創建一個從數組複製數據而不是僅返回引用的方法。 –