2017-03-21 1 views
0

Ich versuche eine AP CS FRQ Frage zu beenden. Ich habe den Code geschrieben, aber es funktioniert nicht. Wo habe ich versagt?Die Summe der Zeilen eines 2d-Arrays finden und es in einem Array zurückgeben

eine statische Methode rowSums schreiben, die die Summen von jedem der Reihen in einer gegebenen zweidimensionalen Array und gibt diese Summen in einem eindimensionalen Array berechnet. Die Methode hat einen Parameter, ein zweidimensionales Array arr2D von int-Werten. Das Array befindet sich in der Reihenfolge der Zeilen: arr2D [r] [c] ist der Eintrag in Zeile r und Spalte c. Die Methode gibt ein eindimensionales Array mit einem Eintrag für jede Zeile von arr2D zurück, sodass jeder Eintrag die Summe der entsprechenden Zeile in arr2D ist. Zur Erinnerung, jede Zeile eines zweidimensionalen Arrays ist ein eindimensionales Array.

` 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; 
    }` 

Antwort

0

Ihre Aufgabe ist es nach hinten, sollten Sie jedes Element des 2D-Arrays werden die Speicherung mit diesem:

total2 = arr2D[x][n]; 

das nicht:

arr2D[x][n] = total2; 

Voll Code:

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

Sie müssen total2 innerhalb der äußeren Schleife zurückgesetzt werden, und setzen Sie den Wert nach dem Ende der inneren Schleife

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; 
    } 

Wenn total2 nicht wieder verwendet werden soll, dies zu

verkürzt werden kann
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

Schreiben guten Code enthält gute Kommentare und gute Variablennamen. Lassen Sie uns beginnen, indem zunächst für Zeile Code Zeile nur kommentieren durch, damit Sie besser sehen, was los ist:

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; 
    } 

Total2 wird nie

Ok, so hoffentlich ist es ein wenig klarer, dass einer Ihrer Linien rückwärts (und Sie haben einige schlechte variable Benennungsoptionen). Etwas besser sieht mehr wie folgt aus:

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; 
    } 

Da die Variablen sind jetzt viel klarer, können wir die überflüssigen Kommentare in gerade diese entfernen:

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

Einige würden argumentieren, dass guter Code nicht einmal Kommentare erfordern sollte :-) (vielleicht ist Javadoc aber OK). –

+0

@TimBiegeleisen Da stimme ich völlig überein - für jemanden, der damit anfängt, machen sie alles wesentlich einfacher zu lesen (und helfen auch bei diesen Benennungsoptionen). –

+1

hmm, ein bisschen zu ausführlich für mich –

-1

arr2D [x] [n] = total2; // Sie ordnen 0 zu arr2D zu [x] [n]

ändern Sie es zu total2 = arr2D [x] [n];

und es wird funktionieren !!

+0

@ Luke nein du dont bcz wird es total2 jedes Mal einen neuen Wert zuweisen. Versuch es bitte !! – Mahen

Verwandte Themen