我正在做一项java作业。这是一个跟随视频。添加
isGameFinished
方法后,我的主板不再显示 X。 (我一直在运行它,直到此时才遇到问题)
我很难看出我犯了什么错误。
import java.util.Random;
import java.util.Scanner;
public class TicTacToe {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[][] board = { { ' ', ' ', ' ' }, { ' ', ' ', ' ' }, { ' ', ' ', ' ' } };
printBoard(board);
while (true) {
playerMove(board, scanner);
if (isGameFinished(board)) {
break;
}
printBoard(board);
computerTurn(board);
if (isGameFinished(board)) {
break;
}
printBoard(board);
}
// print(board);
// scanner.close();
}
private static boolean isGameFinished(char[][] board) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
if (board[i][j] == ' ') {
return false;
}
}
}
printBoard(board);
System.out.println("Game ended in a tie");
return true;
// TODO Auto-generated method stub
}
private static void computerTurn(char[][] board) {
Random rand = new Random();
int computerMove;
while (true) {
computerMove = rand.nextInt(9) + 1;
if (isValidMove(board, computerMove)) {
break;
}
}
System.out.println("Computer chose space " + computerMove);
placeMove(board, Integer.toString(computerMove), 'O');
}
private static boolean isValidMove(char[][] board, int position) {
switch (position) {
case 1:
return (board[0][0] == ' ');
case 2:
return (board[0][1] == ' ');
case 3:
return (board[0][2] == ' ');
case 4:
return (board[1][0] == ' ');
case 5:
return (board[1][1] == ' ');
case 6:
return (board[1][2] == ' ');
case 7:
return (board[2][0] == ' ');
case 8:
return (board[2][1] == ' ');
case 9:
return (board[2][2] == ' ');
default:
System.out.println(":(");
}
return false;
}
private static void playerMove(char[][] board, Scanner scanner) {
String userInput;
while (true) {
System.out.println("Where would you like to play? (1-9)");
userInput = scanner.next();
if (isValidMove(board, Integer.parseInt(userInput))) {
break;
} else {
System.out.println(userInput + " is not a valid move. Choose another spot");
}
placeMove(board, userInput, 'X');
}
}
private static void placeMove(char[][] board, String position, char symbol) {
switch (position) {
case "1":
board[0][0] = symbol;
break;
case "2":
board[0][1] = symbol;
break;
case "3":
board[0][2] = symbol;
break;
case "4":
board[1][0] = symbol;
break;
case "5":
board[1][1] = symbol;
break;
case "6":
board[1][2] = symbol;
break;
case "7":
board[2][0] = symbol;
break;
case "8":
board[2][1] = symbol;
break;
case "9":
board[2][2] = symbol;
break;
default:
System.out.println(":(");
}
}
private static void printBoard(char[][] board) {
System.out.println(board[0][0] + "|" + board[0][1] + "|" + board[0][2]);
System.out.println("-+-+-");
System.out.println(board[1][0] + "|" + board[1][1] + "|" + board[1][2]);
System.out.println("-+-+-");
System.out.println(board[2][0] + "|" + board[2][1] + "|" + board[2][2]);
}
}
我尝试回溯我的工作,撤消我所做的事情,并将其与视频教程进行比较,但我没有看到它。
your text
这里有一些建议。
利用 Arrays#fill 方法。
char[][] board = new char[3][3];
for (char[] r : board) Arrays.fill(r, ' ');
简化 isValidMove 方法。
private static boolean isValidMove(char[][] board, int position) {
return switch (position) {
case 1, 2, 3 -> board[0][position - 1] == ' ';
case 4, 5, 6 -> board[1][position - 4] == ' ';
case 7, 8, 9 -> board[2][position - 7] == ' ';
default -> false;
};
}
还有 placeMove 方法。
private static void placeMove(char[][] board, int position, char symbol) {
switch (position) {
case 1, 2, 3 -> board[0][position - 1] = symbol;
case 4, 5, 6 -> board[1][position - 4] = symbol;
case 7, 8, 9 -> board[2][position - 7] = symbol;
}
}