2017-03-01 5 views
0

Warum funktioniert meine Lösung nicht?Verwirrende 2D-Arrays

Es ist eine Übung zum Üben von 2D-Arrays, und anscheinend habe ich darin versagt, sie zu verstehen. Eingabe ist eine Methode zu erstellen, die die größte sanduhrförmige Anzahl von Ganzzahlen in einem Array [] [] findet. Die Größe eines Arrays ist immer 6x6, daher sind for-Schleifen x < 4 und y < 4, auch ganzzahlige Werte werden von -9 bis 9 sein, deshalb beginnt meine Ergebnisvariable mit -256 (wenn ich mit 0, Array full begann negative Werte würden nicht funktionieren)

Probeneingang

1 1 1 0 0 0 
0 1 0 0 0 0 
1 1 1 0 0 0 
0 0 2 4 4 0 
0 0 0 2 0 0 
0 0 1 2 4 0 

das ist die Sanduhr-Form ist in Ausgang resultierenden

2 4 4 
    2 
1 2 4 

Beispielausgabe

19 

Mein falscher Ausgang

13 

Hier ist die Methode:

public class Lösung { public static int biggestHourglass (int [] [] Puffer) {

 int result = -256; 
     int currentSize = 0; 

     for (int x=0; x<4; x++){ 
      for (int y=0; y<4; y++){ 
       currentSize = (buffer[x][y+2] + buffer[x+1][y+2] + buffer[x+2][y+2] 
             + buffer[x+1][y+1] 
         + buffer[x][y] + buffer[x+1][y] + buffer[x+2][y]); 
       if (currentSize > result) { result = currentSize;} 
      } 
     } 

     return result; 
    } 
} 

Dann Methode meiner biggestHourglass() in Haupt verwendet.

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    int arr[][] = new int[6][6]; 
    for(int i=0; i < 6; i++){ 
     for(int j=0; j < 6; j++){ 
      arr[i][j] = in.nextInt(); 
     } 
    } 
    System.out.println(Solution.biggestHourglass(arr)); 
} 
} 

Mein resulst nicht erwartet überein, und ich weiß nicht, was ich falsch gemacht. Bitte sei nicht unhöflich, ich lerne immer noch. Vielen Dank!

+1

Sie sollten angeben, was "größte sanduhrförmigen Anzahl von ganzen Zahlen" bedeuten . –

+0

Schauen Sie sich Beispiel Eingabe, wenn Sie in der oberen linken Ecke dieses 2D-Array, '1' s etwas wie Sanduhr Form, 1 1 1 oben, dann 1 in der Mitte und 1 1 1 unten, das ist eine Sanduhr Form, was ich muss ich finden, ich werde versuchen, es besser in meiner Frage zu erklären, danke für das Feedback –

+0

Aber das ist eine ziemlich lockere Definition. Wenn ich in der ersten und dritten Reihe sechs 1 und in der zweiten Reihe zwei 1 hatte, zählt das (weil die allgemeine Form ähnlich wäre). Kann ich mehr als 3 Reihen haben? Was sollten sie enthalten, um als "sanduhrförmig" zu gelten. –

Antwort

1
public class Solution { 
    public static int biggestHourglass(int[][] buffer){ 

     int result = -256; 
     int currentSize = 0; 

     for (int x=0; x<4; x++){ 
      for (int y=0; y<4; y++){ 
       currentSize = (buffer[x+2][y] + buffer[x+2][y+1] + buffer[x+2][y+2] 
             + buffer[x+1][y+1] 
         + buffer[x][y] + buffer[x][y+1] + buffer[x][y+2]); 
       if (currentSize > result) { result = currentSize;} 
      } 
     } 

     return result; 
    } 
} 

Ich habe das nicht überprüft, aber sieht aus wie Sie X- und Y-Achse vermessen.

so dass im Grunde Sie nahm:

[x][_][x] 
[x][x][x] 
[x][_][x] 

Form statt:

[x][x][x] 
[_][x][_] 
[x][x][x] 
+0

Ja, es funktioniert !! Ich danke dir sehr. –

1
currentSize = (buffer[x][y] + buffer[x][y+1] + buffer[x][y+2] 
            + buffer[x+1][y+1] 
        + buffer[x+2][y] + buffer[x+2][y+1] + buffer[x+2][y+2]); 
      if (currentSize > result) { result = currentSize;} 

* Größe Berechnung wird wie oben sein, wie Sie

(0 hinzufügen wollen, 0) + (0,1) + (0,2)

+ (1,1) + 

(2,0) + (2,1) + (2,2)

in Ihrer ersten Iteration und so weiter *

+0

Vielen Dank! –