2017-06-08 94 views
-1

我想交換二維數組中的列和行。切換行和列2d陣列

我的問題是,我想變量「oldField」保存舊字段。我認爲變量是指向與newField相同的對象,所以即使我不想要,它也會發生變化。

我想知道我怎麼可以保存可變菲爾德獨立

public int[][] swapMatrix(int[][] pField) { // swaps the rows and columns in 
              // a Field 
    int[][] oldField = pField.clone(); 
    int[][] newField = pField.clone(); 
    for (int i = 0; i < newField.length; i++) { 
     for (int j = (newField.length - 1); j >= 0; j--) { 
      newField[i][(newField.length - 1) - j] = oldField[j][i]; 
     } 
    } 
    return newField; 

} 
+2

的[?你如何旋轉一個二維數組(可能的複製https://stackoverflow.com/questions/42519/how-do-你旋轉一個二維數組) – xenteros

回答

0

當您在1-d陣列,如int原始值,那麼新的陣列和內容複製到其複製並沒有參考。

int row1[] = {0,1,2,3}; 
    int row2[] = row1.clone(); 
    row2[0] = 10; 
    System.out.println(row1[0] == row2[0]); // prints false 

但對2- d陣列的內容是對象和克隆方法只能做,如果對象是存在的。對於你的要求,你需要做深拷貝淺拷貝沒有創造新的內容。

int table1[][]={{0,1,2,3},{11,12,13,14}}; 
    int table2[][] = table1.clone(); 
    table2[0][0] = 100; 
    System.out.println(table1[0][0] == table2[0][0]); //prints true 
0

這段代碼解決您的問題:

public class SwapRowsAndColumns { 

    public static void main(String[] args) { 

     int[][] someMatrix = new int[2][3]; 

     someMatrix[0][0] = 1; 
     someMatrix[0][1] = 2; 
     someMatrix[0][2] = 3; 

     someMatrix[1][0] = 4; 
     someMatrix[1][1] = 5; 
     someMatrix[1][2] = 6; 

     printMatrix(someMatrix); 
     int[][] invertedMatrix = swapMatrix(someMatrix); 
     printMatrix(invertedMatrix); 

    } 

    private static int[][] swapMatrix(int[][] pField) { 

     int originalTotalRows = pField.length; 
     int originalTotalColumns = pField[0].length; 

     int[][] newMatrix = new int[originalTotalColumns][originalTotalRows]; 

     for(int i=0; i< originalTotalRows; i++){ 
      for(int j=0; j < originalTotalColumns; j++){ 
       newMatrix[j][i] = pField[i][j]; 
      } 
     } 
     return newMatrix; 
    } 

    private static void printMatrix(int[][] matrix){ 
     int totalRows = matrix.length; 
     int totalColumns = matrix[0].length; 

     for(int i=0; i< totalRows; i++){ 
      for(int j=0; j< totalColumns; j++){ 
       System.out.print(matrix[i][j] + " "); 
      } 
      System.out.println(""); 
     } 
    } 
} 
+0

ty,我複製矩陣與2x爲(){...}現在它工作得很好 –