gpt4 book ai didi

java - Tic Tac Toe 程序循环问题

转载 作者:行者123 更新时间:2023-12-01 11:56:48 26 4
gpt4 key购买 nike

编辑:我注意到,当您为 TicTacToe 表输入错误的数字时,我的程序会输出“无效移动”。什么会导致这种情况呢?我只使用 move(row, col) 方法一次,因此它不会重复无效输入两次。

我一直在构建一个 Tic Tac Toe 程序,我相信我已经完成了 99.9%。有一个令人讨厌的循环我无法弄清楚,我已经添加了一些东西一段时间来尝试修复它。我认为这只是一个我自己似乎无法注意到的小愚蠢错误。

无论如何,问题是一旦我完成游戏并输入"is",程序就会终止并结束。可能是什么原因造成的,因为我将 while 循环放在另一个 do while 循环中,这样我就可以摆脱它,然后立即返回到它。

这是我的整个代码。

import java.util.Scanner;

public class TicTacToe {

// These two variables are for placing the X's and O's in the TicTacToe
// table.
static int row;
static int col;

// This array is for the TicTacToe table.
static char[][] table = new char[3][3];

// This is for ending the while statement that controls the game
static boolean continuePlaying = true;
static boolean quitGame = false;

// These will store the names for player 1 and 2
static String p1;
static String p2;

// This variable is to count the number of games played
static int gamesCounter = 0;

// This variable is to count the number of moves
static int moveCounter = 0;

// These two variables are to keep track of the wins each player has
static int p1Wins = 0;
static int p2Wins = 0;

static void clearTable() {
for (int i = 0; i < table.length; i++) {
table[0][i] = ' ';
table[1][i] = ' ';
table[2][i] = ' ';

}
}

// This method will determine if the game is a tie.
static boolean checkTie() {
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
if (table[i][j] == ' ') {
return false;
}
}
}
return true;
}

// This is my displayTable() method. This will show the table and the X's or
// O's each player has played
static void displayTable() {
System.out.println(" 0 1 2");
System.out.println("0[" + table[0][0] + "][" + table[0][1] + "]["
+ table[0][2] + "]");
System.out.println("1[" + table[1][0] + "][" + table[1][1] + "]["
+ table[1][2] + "]");
System.out.println("2[" + table[2][0] + "][" + table[2][1] + "]["
+ table[2][2] + "]");
}

// This is my move(int row,int col) method. This will record the moves each
// player takes and insert X's or O's depending on which player
static boolean move(int row, int col) {
// This if statement will return false if the user enters in coordinates
// outside the 3x3 zone.
if (row > 2 || row < 0) {
System.out.println("Invalid move.");
return false;
}
// This if statement checks if the array already has an X or O in the
// chosen space. If the array is already filled it will return false.
else if (table[row][col] == 'X' || table[row][col] == 'O') {
System.out.println("Not available.");
return false;
} else
return true;
}

// This is my checkRow method. It checks for 3 X's or O's in a row. If there
// are 3 in a row it will return true, if not, it returns false.
static boolean checkRow(int row) {
if ((table[row][0] & table[row][1] & table[row][2]) == 'X')
return true;
if ((table[row][0] & table[row][1] & table[row][2]) == 'O')
return true;
else
return false;
}

// This is my checkCol method. It checks for 3 X's or O's in a row. If there
// are 3 in a row it will return true, if not, it returns false.
static boolean checkCol(int col) {
if ((table[0][col] & table[1][col] & table[2][col]) == 'X')
return true;
if ((table[0][col] & table[1][col] & table[2][col]) == 'O')
return true;
else
return false;
}

// This is my checkDiagonal method. It checks for 3 X's or O's in a row. If
// there are 3 in a row it will return true, if not, it returns false.
static boolean checkDiagonal() {
if ((table[0][0] & table[1][1] & table[2][2]) == 'X')
return true;
if ((table[2][0] & table[1][1] & table[0][2]) == 'X')
return true;
if ((table[0][0] & table[1][1] & table[2][2]) == 'O')
return true;
if ((table[2][0] & table[1][1] & table[0][2]) == 'O')
return true;
else
return false;
}

// This is my checkWinner method. It runs all the other checks to see if
// anyone won.
// If there is a winner the method returns true. If there is no winner yet,
// the method returns false.
static boolean checkWinner() {
if (checkRow(0) == true)
return true;
if (checkRow(1) == true)
return true;
if (checkRow(2) == true)
return true;
if (checkCol(0) == true)
return true;
if (checkCol(1) == true)
return true;
if (checkCol(2) == true)
return true;
if (checkDiagonal() == true)
return true;
else
return false;
}

public static void main(String[] args) {
// The Scanner for asking each player's names
Scanner s = new Scanner(System.in);

// The beginning structure of the TicTacToe program
System.out.println("TicTextToe");
System.out.print("Name of player 1: ");
p1 = s.nextLine();

// Asks for Player 2's name
System.out.print("Name of player 2: ");
p2 = s.nextLine();

do {

// The TicTacToe table set up, coordinates provided around the
// squares
// The displayTable() method will be used to display the table here.
while (continuePlaying == true) {
displayTable();
System.out.print("Player " + p1 + ":");
row = s.nextInt();
col = s.nextInt();
move(row, col);

// This will display the table again and ask for proper
// coordinates.
while (move(row, col) == false) {
displayTable();
System.out.println("Player " + p1 + ":");
row = s.nextInt();
col = s.nextInt();
move(row, col);
}

// This inputs the X into the table if move(row, col) returns
// true.
if (move(row, col) == true) {
moveCounter++;
table[row][col] = 'X';
}

// This will check if p1 just won the game or if the game needs
// to
// continue
checkRow(0);
// System.out.println(checkRow(0)); //This prints out if row 0
// is
// true or false
checkRow(1);
// System.out.println(checkRow(1)); //This prints out if row 1
// is
// true or false
checkRow(2);
// System.out.println(checkRow(2)); //This prints out if row 2
// is
// true or false
checkCol(0);
// System.out.println(checkCol(0)); //This prints out if column
// 0 is
// true or false
checkCol(1);
// System.out.println(checkCol(1)); //This prints out if column
// 1 is
// true or false
checkCol(2);
// System.out.println(checkCol(2)); //This prints out if column
// 2 is
// true or false
checkDiagonal();
// System.out.println(checkDiagonal()); //This prints out true
// or
// false depending on the diagonals
checkWinner();
// System.out.println(checkWinner()); //This prints out if
// checkWinner is true or false. If it's true the while loop
// should
// end

// This will check if there is a tie
// checkTie();
if (moveCounter == 9) {
displayTable();
System.out.println("It's a tie!");
gamesCounter++;
clearTable();
moveCounter = 0;
System.out.println("Another Game? Yes/No :");
String answer = s.next();
if (answer.equals("Yes")) {
break;
}
if (answer.equals("No")) {
continuePlaying = false;
clearTable();
System.out.println("Statistics:");
System.out.println(p1 + p1Wins + "/" + gamesCounter);
System.out.println(p2 + p2Wins + "/" + gamesCounter);
quitGame = false;
break;
}
}

if (checkWinner() == true) {
displayTable();
System.out.println("Player " + p1 + " wins!");
gamesCounter++;
p1Wins++;
clearTable();
moveCounter = 0;
System.out.println(p1 + " " + p1Wins + "/" + gamesCounter);
System.out.println(p2 + " " + p2Wins + "/" + gamesCounter);
System.out.println("Another game? Yes/No :");
String answer = s.next();
if (answer.equals("Yes")) {
break;
} else if (answer.equals("No")) {
continuePlaying = false;
System.out.println("Statistics:");
System.out.println(p1 + p1Wins + "/" + gamesCounter);
System.out.println(p2 + p2Wins + "/" + gamesCounter);
quitGame = false;
break;
}
}

displayTable();
System.out.print("Player " + p2 + ":");
row = s.nextInt();
col = s.nextInt();
move(row, col);

// This will display the table again and ask for proper
// coordinates.
while (move(row, col) == false) {
displayTable();
System.out.println("Player " + p2 + ":");
row = s.nextInt();
col = s.nextInt();
move(row, col);
}

// This inputs the O into the table if move(row, col) returns
// true.
if (move(row, col) == true) {
moveCounter++;
table[row][col] = 'O';
}

// This will check if p2 just won the game or if the game needs
// to
// continue
// checkRow(0);
// System.out.println(checkRow(0)); //This prints out if row 0
// is
// true or false
checkRow(1);
// System.out.println(checkRow(1)); //This prints out if row 1
// is
// true or false
checkRow(2);
// System.out.println(checkRow(2)); //This prints out if row 2
// is
// true or false
checkCol(0);
// System.out.println(checkCol(0)); //This prints out if column
// 0 is
// true or false
checkCol(1);
// System.out.println(checkCol(1)); //This prints out if column
// 1 is
// true or false
checkCol(2);
// System.out.println(checkCol(2)); //This prints out if column
// 2 is
// true or false
checkDiagonal();
// System.out.println(checkDiagonal()); //This prints out true
// or
// false depending on the diagonals
checkWinner();
// System.out.println(checkWinner()); //This prints out if
// checkWinner is true or false. If it's true the while loop
// should
// end

// This will check if there is a tie
// checkTie();
if (moveCounter == 9) {
displayTable();
System.out.println("It's a tie!");
gamesCounter++;
clearTable();
moveCounter = 0;
System.out.println("Another Game? Yes/No :");
String answer = s.next();
if (answer.equals("Yes")) {
break;
}
if (answer.equals("No")) {
continuePlaying = false;
clearTable();
System.out.println("Statistics:");
System.out.println(p1 + p1Wins + "/" + gamesCounter);
System.out.println(p2 + p2Wins + "/" + gamesCounter);
quitGame = false;
break;
}
}

if (checkWinner() == true) {
displayTable();
System.out.println("Player " + p2 + " wins!");
gamesCounter++;
p2Wins++;
clearTable();
System.out.println(p1 + " " + p1Wins + "/" + gamesCounter);
System.out.println(p2 + " " + p2Wins + "/" + gamesCounter);
System.out.println("Another game? Yes/No :");
String answer = s.next();
if (answer.equals("Yes")) {
break;
}
if (answer.equals("No")) {
continuePlaying = false;
clearTable();
System.out.println("Statistics:");
System.out.println(p1 + p1Wins + "/" + gamesCounter);
System.out.println(p2 + p2Wins + "/" + gamesCounter);
quitGame = true;
break;
}

}

}

} while (quitGame = false);
}
}

最佳答案

您的状况检查正常:

while (quitGame = false);

应该是:

while (quitGame == false);

双等号。

关于java - Tic Tac Toe 程序循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com