2017-01-11 6 views
1

Ich arbeite an einer Hausaufgabe, wo ich ein Array füllen und überprüfen muss, ob es vier aufeinander folgende Zahlen gibt, die irgendwo auf und ab sind, Seite an Seite oder diagonal. Ich denke, ich habe die Logik herunter, aber meine for-Schleife stoppt bei der ersten Iteration, anstatt das Array zu durchsuchen. Jede Hilfe wird geschätzt.Java For-Schleife nicht iterierend, stoppt die Methode nach einer Iteration statt zu wiederholen

public static boolean isConsecutiveFour(int[][] values) { 
    int One = 0; 

    for (int i = 0; i < values[0].length; i++) { 
     for (int j = 0; j < values.length; j++) { 
      One = values[i][j]; 
      //System.out.println(One); 
      // up and down 
      if (values[i + 1][j] == One) { 
       if (values[i + 2][j] == One) { 
        if (values[i + 3][j] == One) { 
         return true; 
        } 
       } 
      } 
      // left to right 
      if (values[i][j + 1] == One) { 
       if (values[i][j + 2] == One) { 
        if (values[i][j + 3] == One) { 
         return true; 
        } 
       } 
      } 
      // diagonal to right 
      if (values[i + 1][j + 1] == One) { 
       if (values[i + 2][j + 2] == One) { 
        if (values[i + 3][j + 3] == One) { 
         return true; 
        } 
       } 
      } 
      // diagonal to left 
      if (i >= 3 && j >=3) { 
       if (values[i - 1][j - 1] == One) { 
        if (values[i - 2][j - 2] == One) { 
         if (values[i - 3][j - 3] == One) { 
          return true; 
         } 
        } 
       } 
      } else 
       return false; 
     } 
    } 
    return false; 

} 
+1

Bitte geben Sie das Array 'values' an. – nvioli

+4

'int Eins = 0;' whät? – luk2302

+1

Sie haben hier eine große Menge an Code veröffentlicht - bitte reduzieren Sie dies auf [mcve]. –

Antwort

5
// diagonal to left 
if (i >= 3 && j >=3) { 
    if (values[i - 1][j - 1] == One) { 
     if (values[i - 2][j - 2] == One) { 
      if (values[i - 3][j - 3] == One) { 
       return true; 
      } 
     } 
    } 
} else 
    return false; 

Das Problem ist, wenn diese letzte if Anweisung schlägt fehl, die else Klausel Auslöser und gibt false. Es ist zu früh, hierher zurückzukehren, nur weil eine bestimmte Überprüfung fehlgeschlagen ist.

Entfernen Sie die else Klausel. Sie möchten false nicht zurückgeben, bis alle Schleifeniterationen ausgeführt wurden. Die letzte return false am Ende der Funktion ist alles was Sie brauchen.

2

Ich habe nicht Ihren ganzen Code überprüft, aber Ihre Bedingungen scheinen mir falsch. Normalerweise überprüfen Sie die äußere for-Schleife für die erste Dimension eines Arrays und im inneren für die zweite Dimension. Sie sollten auch Werte [i] .length in der inneren Schleife verwenden, da es möglich ist, dass die Länge der Werte [1] niedriger ist als die Länge des Werts [0].

for (int i = 0; i < values.length; i++) { 
    for (int j = 0; j < values[i].length; j++) { 
Verwandte Themen