2014-03-29 178 views
1

我對這段代碼有困難。我試圖返回一個2d,這是輸入數組的反轉。 我不知道如何正確編碼。也許有人可能會有幾點建議通過二維數組循環

public class arrays { 
    int[][] transpose(int[][] a) { 
     int[][] good = new int[a.length][a.length]; /* assign dimension, I want it to be the same as input */ 

     for (int i = 0; i < a.length; i++) { 
      for (int k = 0; k < a[k].length; k++) { // //nested loop to go through the rows and columns 
       good[i][k] = a[k][i]; // /// switch elements 
      } 
     } 
     return good; 
    } 
} 

回答

2

你需要仔細考慮哪個變量表示一行,哪一列是一列。並在哪個數組中(agood)。

正如我在你的代碼周圍切換這些,這個改進版做的工作:

public class Arrays { 
    static int[][] transpose(int[][] a) { 
     // Only works if a is rectangular (every row in a has the same number of columns) 
     int[][] good = new int[a[0].length][a.length]; 

     for (int i = 0; i < a.length; i++) { 
      // Use a[i].length, not a[k].length because k will be bigger than a.length at some point. 
      for (int k = 0; k < a[i].length; k++) { 
       // i = row in 'a', column in 'good' 
       // k = column in 'a', row in 'good' 
       good[k][i] = a[i][k]; 
      } 
     } 
     return good; 
    } 
} 

的問題是:

  1. int[][] good = new int[a.length][a.length];在這裏,你正在創建good即使原始方陣可以是任何矩形形狀(不同數量的行和列)。您需要切換行數和列數,因此new int[a[0].length][a.length]是一個很好的解決方案。 (假設所有行具有相同的列數,這是在一個矩陣需要)
  2. for (int k = 0; k < a[k].length; k++)這裏k將會增加,直到它比a.length大,你會得到一個ArrayIndexOutOfBoundsException要循環對所有列行i,所以上限爲a[i].length,而不是a[k]
  3. good[i][k] = a[k][i]請記住,ia中的行,而不是good。在good,它是專欄。所以你需要在作業的兩邊交換你的i和k。
+0

謝謝!非常有幫助 – tim