2014-04-02 99 views
0

我有一個陣列INT [3] [3]與該初始位置:爪哇複製陣列 - 參考

(A)

block[0][0] = 1; 
block[0][1] = 1; 
block[0][2] = 1; 
block[1][0] = 1; 
block[1][1] = 1; 
block[1][2] = 1; 
block[2][0] = 1; 
block[2][1] = 0; 
block[2][2] = 1; 

//Visually 
1 1 1 
1 1 1 
1 0 1 

我有取 「0」 元件的方法和與上部元件改變,所以下一狀態是:

(B)

1 1 1 
1 0 1 
1 1 1 

但問題是,我想創建一個新的數組(所謂AUX)這個位置,不要因爲超越控制框陣列(A)

這裏是我的代碼:

//Creating array B 
int[][] aux = new int[3][3]; 
aux = block; //load the values of original array 
aux[line][row] = aux[line-1][row]; 
aux[line-1][row] = 0; 

但是當我檢查輸出中,我也覆蓋了原來的陣列(塊)。

所以我有數組BLOCK和具有相同值的數組AUX,並且不保留數組BLOCK與原始數據。

============================================== =============================

編輯:

我試圖用克隆和copyOf功能,但結果也影響了原始數組。 這裏是我的代碼:

System.out.println("INITIAL BLOCK VALUES"); 
      System.out.println(
          bloco[0][0] +""+ 
          bloco[0][1] +""+ 
          bloco[0][2] + 
          "\n"+ 
          bloco[1][0]+ 
          bloco[1][1]+ 
          bloco[1][2]+ 
          "\n"+ 
          bloco[2][0] + 
          bloco[2][1] + 
          bloco[2][2] 
        ); 



      //Cloning original array to a new one 
      int[][] aux = bloco.clone(); 

      //Here what I'm doing is changing the first element of AUX, just for test 
      aux[0][0] = 9; 




      // Block array shouldnt be affected! Lets check it out: 

      System.out.println("FINAL BLOCK VALUES"); 
      System.out.println(
            bloco[0][0] +""+ 
          bloco[0][1] +""+ 
          bloco[0][2] + 
          "\n"+ 
          bloco[1][0]+ 
          bloco[1][1]+ 
          bloco[1][2]+ 
          "\n"+ 
          bloco[2][0] + 
          bloco[2][1] + 
          bloco[2][2] 
        ); 

而且OUPUT是:

INITIAL BLOCK VALUES 
111 
111 
101 
FINAL BLOCK VALUES 
911 
111 
101 

有什麼想法?

OBS:此代碼是一個被稱爲「節點」類構造器是一個函數內部:

public Nodo(int[][] blocos) 
     { 
      this.bloco = blocos; 
     } 
+0

請參考這個問題: http://stackoverflow.com/questions/2371568/copying-array-by-value-in-java –

+0

檢查此 - http://stackoverflow.com/questions/5785745/make-copy-of-array-java – hellboy

+0

@KangLi我剛剛編輯了這個問題,我仍然有問題= /有什麼想法? – user2294899

回答

0

該計劃顯示了原始陣列複製到新陣列,而不改變原來的數組值

class Array 
{ 
public static void main (String[] args) { 

    int[][] block = new int[3][3]; 
//load the values of original array 

    block[0][0] = 1; 
    block[0][1] = 1; 
    block[0][2] = 1; 
    block[1][0] = 1; 
    block[1][1] = 1; 
    block[1][2] = 1; 
    block[2][0] = 1; 
    block[2][1] = 0; 
    block[2][2] = 1; 
    int[] [] aux=new int[3][3]; 
    for(int i=0;i<3;i++) 
    { 
for(int j=0;j<block[i].length;j++) 
    { 
    aux[i][j]=block[i][j]; 
    } 
System.out.print("\n"); 
    } 
aux[1][1]=0;//replace array value 
aux[2][1]=1;//replace array value 1 
System.out.print("Old Array \n"); 
for(int i=0;i<3;i++) 
{ 
for(int j=0;j<block[i].length;j++) 
    { 
System.out.print(block[i][j]); 
    } 
System.out.print("\n"); 
} 
System.out.print("New Array \n"); 
for(int i=0;i<3;i++) 
{ 
for(int j=0;j<block[i].length;j++) 
    { 
    System.out.print(aux[i][j]); 
    } 
     System.out.print("\n"); 
    } 
    } 
} 

outpur:輔助的數組是

Old Array 
    111 
    111 
    101 
    New Array 
    111 
    101 
    111