2016-04-18 9 views
0

Teil meines Codes, wo Sie ein Puzzle mit der Idee der Neuabstimmung eines gemischten 4x4-Nummern-Array wieder in seinen ursprünglichen Zustand spielen können. der Benutzer gibt bestimmte Befehle ein, z. Reihe 0 Reihe 1, und eine Schleife macht den Befehl, druckt das letzte Puzzle und fragt nach dem Befehl und sollte enden, wenn das Puzzle mit dem ursprünglichen Zustand des Puzzles übereinstimmt. Meine Schleife bricht nie wieder, wenn ich zum ursprünglichen Puzzle zurückkehrt und druckt fortwährend ungültige Eingaben, selbst wenn die korrekte Eingabe eingegeben wurde. Wie kann ich diese Probleme beheben? ist dies nur das Spiel Verfahren Teil des CodesSchleife nicht unterbrochen und ungültige Eingabe immer angezeigt

static void play(int[][] puzzle) { 
     reset(puzzle); 
     int[][] z = new int[N][N]; 
     reset(z); 
     print(puzzle); 
     for (int i = 0; i < 5; i++) { 
      randomRotation(puzzle); 

     } 

     print(puzzle); 


     while (puzzle!=z) { 
      System.out.println("enter row x or col x: "); 
      Scanner input = new Scanner(System.in); 
      String x = input.nextLine(); 
      if (!x.equals("row 0") || !x.equals("row 1") ||!x.equals("row 2") ||!x.equals("row 3") ||!x.equals("col 0") ||!x.equals("col 1") ||!x.equals("col 2") ||!x.equals("col3")) { 
       System.out.println("invalid input"); 
      } 



      if (x.equals("row 0")) { 
       rotateRow(puzzle, 0); 
       print(puzzle); 

      } 
      if (x.equals("row 1")) { 
       rotateRow(puzzle, 1); 
       print(puzzle); 

      } 
      if (x.equals("row 2")) { 
       rotateRow(puzzle, 2); 
       print(puzzle); 

      } 
      if (x.equals("row 3")) { 
       rotateRow(puzzle, 3); 
       print(puzzle); 

      } 
      if (x.equals("col 0")) { 
       rotateColumn(puzzle, 0); 
       print(puzzle); 

      } 
      if (x.equals("col 1")) { 
       rotateColumn(puzzle, 1); 
       print(puzzle); 

      } 
      if (x.equals("col 2")) { 
       rotateColumn(puzzle, 2); 
       print(puzzle); 

      } 
      if (x.equals("col 3")) { 
       rotateColumn(puzzle, 3); 
       print(puzzle); 
      } 


     } 

}

+0

"Zeile 0" ist nicht "Zeile 1" und "Zeile 1" ist nicht "Zeile 0" Ich schlage vor, Sie verwenden eine switch-Anweisung, um alle diese Prüfungen zu kombinieren. –

Antwort

1

Verwenden Sie ein continue nach System.out.println("invalid input");.

1

Ihr Boolean ist rückwärts. Zu sagen "ist nicht ... oder ist nicht ... oder ist nicht ..." Wenn es also nicht Schrödingers Katze ist und all diese Werte gleichzeitig sind, wird der Test immer erfolgreich sein.

0

Sie haben ein paar Probleme und Ineffizienzen in Ihrem Code, aber dies ist das Problem, das Sie stellen möchten: Ihr sollte !puzzle.equals(z) statt puzzle!=z sein. Arrays sind keine Primitive und als solche sind zwei unterschiedliche Deklarationen von Arrays, selbst wenn ihre Inhalte die gleichen sind, nie gleich dem Speicher (==).

Außerdem sollten Sie alle if s in else if s setzen und den ungültigen Eingang als else nach unten verschieben. Die else wird dann Ihr Problem mit ors anstelle von ands korrigieren.

+0

der ungültige Eingangsteil funktioniert! aber die Schleife bricht immer noch nicht! irgendwelche anderen Ideen? Prost obwohl! :) @ Zircon – sb33

Verwandte Themen