我创建了一个简单的Tic Tac Toe游戏。除了在游戏结束时,程序决定最终打印最后一行两次的结果时,所有内容都运行完美。例如,如果球员1胜它打印:为什么这行打印两次?
播放器1赢得了
播放器1赢得了
我试着写input.nextLine();在用户输入整数之后但没有运气。 在此先感谢。
这里是我的代码:
public static void main(String[] args) {
//The board
char board[][] = new char [3][3];
//Players' characters
char player1 = 'X';
char player2 = 'O';
char turn = 0;
int rowNumber;
int columnNumber;
int count = 0;
//Welcome mesage
System.out.println("This is a tic tac toe game! \n\n");
System.out.println("Player1 - X \nPlayer 2 - O \n\n");
Scanner input = new Scanner(System.in);
//We display the board
board(board);
while (checkWin(board, player1) && checkWin(board, player2)
&& fullBoard(board)) {
count = count % 2;
if (count == 0) {
System.out.println("Player 1 turn! \n");
turn = player1;
count++;
} else if (count == 1) {
System.out.println("Player 2 turn!");
turn = player2;
count++;
}
while (true) {
System.out.println("Enter a row(1-3):");
rowNumber = input.nextInt();
System.out.println("Enter a column(1-3):");
columnNumber = input.nextInt();
if (board[rowNumber - 1][columnNumber - 1] != 'X'
&& board[rowNumber - 1][columnNumber - 1] != 'O') {
board[rowNumber - 1][columnNumber - 1] = turn;
break;
} else {
System.out.println("Place already taken. Enter again!");
}
}
board(board);
checkWin(board, player1);
checkWin(board, player2);
fullBoard(board);
}
System.out.println("Just checking;");
}
public static void board(char board[][]) {
System.out.println(board[0][0] + " | " + board[0][1] + " | "
+ board[0][2]);
System.out.println(board[1][0] + " | " + board[1][1] + " | "
+ board[1][2]);
System.out.println(board[2][0] + " | " + board[2][1] + " | "
+ board[2][2]);
}
public static boolean checkWin(char board[][], char player) {
if (board[0][0] == player && board[0][1] == player && board[0][2] == player ||
board[1][0] == player && board[1][1] == player && board[1][2] == player ||
board[2][0] == player && board[2][1] == player && board[2][2] == player ||
board[0][0] == player && board[1][0] == player && board[2][0] == player ||
board[0][1] == player && board[1][1] == player && board[2][1] == player ||
board[0][2] == player && board[1][2] == player && board[2][2] == player ||
board[0][0] == player && board[1][1] == player && board[2][2] == player ||
board[2][0] == player && board[1][1] == player && board[0][2] == player){
if(player == 'X'){
System.out.println("Player 1 has won!");
}
else if(player == 'O'){
System.out.println("Player 2 has won!");
}
return false;
}else {
return true;
}
}
public static boolean fullBoard(char board[][]) {
if ((board[0][0] == 'X' || board[0][0] == 'O')
&& (board[0][1] == 'X' || board[0][1] == 'O')
&& (board[0][2] == 'X' || board[0][2] == 'O')
&& (board[1][0] == 'X' || board[1][0] == 'O')
&& (board[1][1] == 'X' || board[1][1] == 'O')
&& (board[1][2] == 'X' || board[1][2] == 'O')
&& (board[2][0] == 'X' || board[2][0] == 'O')
&& (board[2][1] == 'X' || board[2][1] == 'O')
&& (board[2][2] == 'X' || board[2][2] == 'O')){
System.out.println("It's a tie!");
return false;
}else {
return true;
}
}
}
调用方法两次:checkWin(板,PLAYER1); checkWin(board,player2); – Stultuske
您在代码中使用相同的checkWin调用,在while循环中 – Stultuske
@Stultuske这不是问题。 – JamesB