2017-03-21 111 views
0

我試圖完成AP CS FRQ問題。我編寫了代碼,但它不起作用。我在哪裏搞砸了?查找2d數組的行並將其返回到數組中

編寫計算每個在給定的兩維陣列 行的總和,並返回以一維陣列這些總和一個靜態方法rowSums。該方法有一個參數,一個二維數組,其中包含int值的數組arr2D。該數組按行優先順序排列:arr2D [r] [c]是位於行r和列c的條目 。該方法返回一個一維數組,每個條目對應每行 arr2D,使得每個條目都是arr2D中相應行的總和。提醒一下,二維數組的每一行都是一維數組。

` public static int[] rowSums(int[][] arr2D){ 
     int total2 = 0; 
     int a[] = new int[arr2D.length]; 
     for(int x=0; x<arr2D.length; x++){ 
      for(int n=0; n<arr2D[x].length;n++){ 
       arr2D[x][n] = total2; 
       a[x] = a[x] + total2; 
      } 
     } 
     return a; 
    }` 

回答

0

你的任務是倒退,你應該使用這種被存儲的二維數組中的每個元素:

total2 = arr2D[x][n]; 

不是這個:

arr2D[x][n] = total2; 

全碼:

for (int x=0; x < arr2D.length; x++) { 
    for (int n=0; n < arr2D[x].length; n++) { 
     total2 = arr2D[x][n]; 
     a[x] = a[x] + total2; 
    } 
} 
0

需要將外環內復位total2,和內環

int a[] = new int[arr2D.length]; 
    for(int x=0; x<arr2D.length; x++){ 
     int total2 = 0; 
     for(int n=0; n<arr2D[x].length;n++){ 
       total2 += arr2D [x][n]; 
     } 
     a[x] = total2; 
    } 

如果total2不會被重新使用此可以縮短到

for (int x=0; x < arr2D.length; x++) { 
    for (int n=0; n<arr2D[x].length; n++) { 
     a[x] = a[x] + arr2D[x][n]; 
    } 
} 
結束後設置的值
0

編寫優秀的代碼包括良好的評論和良好的變量名稱選擇。讓我們從一開始只是通過一行代碼行留言時間等,你可以更好地看到發生了什麼事情:

public static int[] rowSums(int[][] arr2D){ 

     // A variable which is always 0 
     int total2 = 0; 

     // The actual output: 
     int a[] = new int[arr2D.length]; 

     // For each row.. 
     for(int x=0; x<arr2D.length; x++){ 

      // For each column.. 
      for(int n=0; n<arr2D[x].length;n++){ 

       // Put 0 into the 2D array (this line is backwards): 
       arr2D[x][n] = total2; 

       // Add the 'total' (always 0) into the current output 
       a[x] = a[x] + total2; 
      } 
     } 

     // Return the output 
     return a; 
    } 

共2條從未設置

好,所以希望這是一個更清晰一點,你的線路之一向後(你有一些可憐的變量命名選擇)。更好的東西看起來更像是這樣的:

public static int[] rowSums(int[][] arr2D){ 

     // The actual output: 
     int totals[] = new int[arr2D.length]; 

     // For each row.. 
     for(int row=0; row<arr2D.length; row++){ 

      // For each column.. 
      for(int col=0; col<arr2D[row].length;col++){ 

       // Get the column value: 
       int columnValue = arr2D[row][col]; 

       // Add the column amount into the total: 
       totals[row] = totals[row] + columnValue; 
      } 
     } 

     // Return the output 
     return totals; 
    } 

由於變量現在更加清晰,我們可以刪除多餘的評論逼到這樣的:

public static int[] rowSums(int[][] arr2D){ 

     int totals[] = new int[arr2D.length]; 

     for(int row=0; row<arr2D.length; row++){ 
      for(int col=0; col<arr2D[row].length;col++){ 
       int columnValue = arr2D[row][col]; 
       totals[row] = totals[row] + columnValue; 
      } 
     } 

     return totals; 
    } 
+0

有人會認爲好的代碼甚至不應該需要註釋:-)(也許​​Javadoc是好的,但)。 –

+0

@TimBiegeleisen我完全同意 - 對於剛開始的人來說,他們讓所有事情都變得更容易閱讀(並且也幫助了這些命名選擇)。 –

+1

嗯,對我來說有點太冗長 –

-1

arr2D [X] [N] =共2條; //你將0賦值給arr2D [x] [n]

將它改爲total2 = arr2D [x] [n];

它會工作!

+0

@盧克不,你不會每次都給總數2分配新的值。請試試吧! – Mahen

相關問題