2016-04-18 14 views
0

私のコードの一部で、シャッフルされた4x4数値配列を元の状態に戻すという考えでパズルをプレイすることができます。ユーザは特定のコマンドを入力する。行0の行1、そしてループはコマンドを実行し、最新のパズルを印刷してからコマンドを要求し、パズルがパズルの元の状態に一致したときに終了する必要があります。オリジナルのパズルに戻ったときに私のループが壊れることはなく、正しい入力が入力されても常に無効な入力が表示されます。どうすればこれらの問題を解決できますか? これはコードループが途切れず、無効な入力が常に表示される

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

「行0」は「行1」ではなく、「行1」は「行0」ではありません。これらのすべてのチェックを組み合わせるにはswitch文を使用することをお勧めします。 –

答えて

1

System.out.println("invalid input");continueを使用するだけのプレイ方法の一部です。

1

あなたのブールは後方にあります。 「そうでない、そうでない、そうでない、そうでない」と言っているのは、Schroedingerの猫でなくても、同時にそれらの値であるなら、テストは常に成功するということです。

0

あなたのコードにはいくつかの問題と非効率がありますが、これはあなたが尋ねる問題です:あなたのwhileはpuzzle!=zではなく!puzzle.equals(z)であるべきです。配列はプリミティブではないため、配列の2つの異なる宣言は、たとえ内容が同じであっても、メモリによって決して等しくなることはありません(==)。

また、ifをすべてelse ifにし、無効な入力をelseとして下部に移動する必要があります。 elseは、andsの代わりにorsを使用する問題を修正します。

+0

無効な入力部分が機能しました!しかし、ループはまだ壊れません!他のアイデア?うれしい! :) @ジルコン – sb33

関連する問題