2016-05-26 9 views
0

私はこのTic Tac Toeプログラムにわずかな問題があります。私は、Xピース(私はまだOのためにそれをしていない)と垂直と水平の勝利をチェック入れ子カウンターを持っています。何らかの理由で、決して終わらず、私はますます多くの作品を置くことができます。Tic Tac Toeプログラムが勝者を特定していない

いくつかのコンテキストでは、コードの一部を次に示します。

public static void game (String winner, Board pointer) 
{ 
    boolean win = false; 
    int turnCount = 1; 
    winner = "Tie"; 
    while (win == false || turnCount < 9) 
    { 
     int row = Integer.parseInt(JOptionPane.showInputDialog(pointer.getName1() + ", it is your turn. " + "\n" + "What row would you like your 'x' to be in?")); 
     int col = Integer.parseInt(JOptionPane.showInputDialog("What column would you like it to be in?")); 
     pointer.play[row] [col] = pointer.x; 
     SpotCheck1(winner, pointer, row, col); 
     System.out.println(BoardStat(pointer)); 
     winCheck(win, pointer, winner); 
     int row2 = Integer.parseInt(JOptionPane.showInputDialog(pointer.getName2() + ", it is your turn. " + "\n" + "What row would you like your 'o' to be in?")); 
     int col2 = Integer.parseInt(JOptionPane.showInputDialog("What column would you like it to be in?")); 
     SpotCheck2(winner, pointer, row2, col2); 
     pointer.play[row2] [col2] = pointer.o; 
     System.out.println(BoardStat(pointer)); 
     winCheck(win, pointer, winner); 
     turnCount++; 
    } 
    //return winner; 
} 

public static void winCheck (boolean win, Board pointer, String winner) 
{ 
    for (int counter = 1; counter <= 3; counter++) 
    { 
     if (pointer.play [counter] [1].compareTo(pointer.x) > 0 && pointer.play [counter] [2].compareTo(pointer.x) > 0 && pointer.play [counter] [3].compareTo(pointer.x) > 0) 
     { 
      win = true; 
      winner = pointer.getName1(); 
      win(winner, pointer); 
     }   
     else if (pointer.play [1] [counter].compareTo(pointer.x) > 0 && pointer.play [2] [counter].compareTo(pointer.x) > 0 && pointer.play [3] [counter].compareTo(pointer.x) > 0) 
     { 
      win = true; 
      winner = pointer.getName1(); 
      win(winner, pointer); 
     } 
    } 
    //return win; 

} 

SpotChecks1と2は、プレーヤーがすでに作品を配置しているかどうかを確認する方法です。 WinCheckメソッドに問題があると私は思う。もし誰かが私を助けることができれば、それは素晴らしいだろう!私が間違ったことをした場合、最初の投稿、謝罪します。

+0

:static''' '' 'から離れると、あなたが維持している状態を移動

public static boolean winCheck (boolean win, Board pointer, String winner) { // Other code is unchanged return win; } 

そして、あなたがする方法winCheckのいずれかの呼び出しを変更するあなたのgame方法で

(whileループの外側)をインスタンスフィールドに追加します。 –

答えて

1

あなたは方法winCheckでパラメータwinを変更している、あなたは、このメソッドgame内のローカル変数winを変更することを期待しています。しかし、そうではありません - Javaはメソッドのパラメータを値で渡すので、winCheckwinはコピーであり、変更は反映されません。返品タイプwinCheckbooleanにすることができます。先端のよう

win = winCheck(...); 
+0

彼はブール値、ブール値を囲み、彼が望むものを達成することができます。 – Underbalanced

+2

@Underbalanced 'java.lang.Boolean'は不変なので、彼が望むものを達成できません。 –

+0

私は毎日何か新しいことを学びます。ブールについては知らなかった。ボックス化された値を使用するのはマップ、リストのみです。 – Underbalanced