2016-04-18 37 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

布爾向後。說「不是...或者不是......或者不是......」所以除非是施羅青格的貓,並且同時是所有這些價值觀,測試總是會成功的。

0

您在代碼中存在一些問題和低效率,但這是您詢問的問題:您應該是!puzzle.equals(z)而不是puzzle!=z。數組不是原語,因此兩個不同的數組聲明即使它們的內容相同,也不會因內存而相等(==)。

此外,您應該使所有if s變爲else if s並將無效輸入移動到底部,作爲else。然後else將更正您使用ors而不是ands的問題。

+0

無效的輸入部分工作!但是循環仍然不會中斷!任何其他想法?歡呼雖然! :) @鋯石 – sb33