0
私のTicTacToe
プログラムでは、私のcheckTie
メソッドが機能せず、結果としてアウト・オブ・バウンド配列となりました。プログラムが動作せず、境界外の配列になります
このコードを実行するとボードが印刷され、誰かが勝ち、または3つが残ってからゲームが終了するまで、ゲームが実行されます。
私はそれが私のcheckTie
forループと関係があると思うが、なぜそれが起こるのかわからない。また、タイが発生した場合、何も起こらないか、範囲外の配列が発生します。
import java.util.Scanner;
public class TicTac {
public static int row, col;
public static Scanner scan = new Scanner(System.in);
public static char[][] board = new char[3][3];
public static char turn = 'X';
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = '_';
}
}
Play();
}
public static boolean Play() {
boolean playing = true;
PrintBoard();
while (playing) {
System.out.println();
System.out.print("Please enter row: ");
row = scan.nextInt() - 1;
System.out.print("Please enter column: ");
col = scan.nextInt() - 1;
board[row][col] = turn;
if (GameOver(row, col)) {
playing = false;
System.out.println("Game Over! Player " + turn + " wins!");
**I feel like this code below is where the problem is**
if (checkTie(board)) {
System.out.println("Tie Game!");
return true;
}
}
PrintBoard();
if (turn == 'X')
turn = '0';
else
turn = 'X';
}
return false;
}
public static void PrintBoard() {
for (int i = 0; i < 3; i++) {
System.out.println();
for (int j = 0; j < 3; j++) {
if (j == 0)
System.out.print("| ");
System.out.print(board[i][j] + " | ");
}
}
System.out.println();
}
public static boolean GameOver(int rMove, int cMove) {
// Check if perpendicular victory
if (board[0][cMove] == board[1][cMove] && board[0][cMove] == board[2][cMove])
return true;
if (board[rMove][0] == board[rMove][1] && board[rMove][0] == board[rMove][2])
return true;
// Check Diagonal Victory
if (board[0][2] == board[1][1] && board[0][0] == board[2][2] && board[1][1] != '_')
return true;
if (board[0][2] == board[1][1] && board[0][2] == board[2][0] && board[1][1] != '_')
return true;
return false;
}
これは、ゲームの結果が同点であるかどうかを確認する方法です。
public static boolean checkTie(char[][] board) {
int spacesLeft = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == '_') {
spacesLeft++;
}
}
}
if (spacesLeft == 0) {
return true;
} else {
return false;
}
}
}
プログラムをクラッシュさせるために使用している正確な入力を教えてください。このコードは、あなたが描いている振る舞いを表しているわけではありません。いずれにしても、Javaはあなたに失敗した*正確な行を教えてくれますので、そこでの調査を開始します。 – paxdiablo
IndexOutOfBoundsExceptionが発生している場合は、詳細なスタックトレースが表示されます。スタックトレースが発生した場所は正確ではありません。 –
ああ、申し訳ありませんが、私はOutOfBoundsExceptionを修正しました。試合はcheckTieメソッドを実行せず、終了しません。 –