好吧,所以我必須做一個隨機tictactoe檢查器,顯示何時x勝,何時o勝,何時有領帶。所以我遇到的問題是它不會顯示聯繫,有時會說當x或o沒有贏時,他們就贏了。我不知道要在代碼中改變什麼,因爲在我做對角線檢查之前,它會打印出關係。這裏是整個代碼,但我敢肯定,問題來自檢查板部分,使得xWin和oWin成爲現實,我無法找到它在做什麼的地方。隨機井字棋檢查問題
package test;
import java.util.Scanner;
import java.util.Random;
public class TicTacToe {
public static void main(String[] args) {
System.out.println("Welcome to random Tic Tac Toe Checker. Let's see our randomly generated board.");
int dimension = 3;
char[][] board = new char[dimension][dimension];
Random r = new Random();
for (int i = 0; i < 3; i++) // filling board
{
for (int j = 0; j < 3; j++) {
int choice = r.nextInt(2);
if (choice == 0) {
board[i][j] = 'X';
} else if (choice == 1) {
board[i][j] = 'O';
}
}
}
for (int i = 0; i < 3; i++) // filling board
{
for (int j = 0; j < 3; j++) {
System.out.print(board[i][j]);
}
System.out.println();
}
boolean xWin = false;// checking board, order horizontal,vertical,left
// and right diagonal
boolean oWin = false;
for (int i = 0; i < 3; i++) {
boolean lineWin = true;
for (int j = 0; j < 3; j++) {
if (board[i][j] != board[i][0]) {
lineWin = false;
}
}
if (lineWin == true) {
if (board[i][0] == 'X') {
xWin = false;
}
if (board[i][0] == 'O') {
oWin = false;
}
}
}
for (int j = 0; j < 3; j++) {
boolean lineWin = true;
for (int i = 0; i < 3; i++) {
if (board[i][j] != board[0][j]) {
lineWin = true;
}
}
if (lineWin == true) {
if (board[0][j] == 'X') {
xWin = true;
}
if (board[0][j] == 'O') {
oWin = true;
}
}
}
boolean lineWin = true;
for (int i = 0; i < 3; i++) {
if (board[0][0] != board[i][i]) {
lineWin = false;
}
if (lineWin == true) {
if (board[0][0] == 'X') {
xWin = true;
}
if (board[0][0] == 'O') {
oWin = true;
}
}
}
lineWin = true;
for (int i = 0; i < 3; i++) {
if (board[0][0] != board[i][2 - i]) {
lineWin = false;
}
if (lineWin == true) {
if (board[0][0] == 'X') {
xWin = true;
}
if (board[0][0] == 'O') {
oWin = true;
}
}
}
if (xWin == false && oWin == false)// printing winners
{
System.out.println("CAT!It's a tie no one wins");
}
if (xWin == true) {
System.out.println("X wins!");
}
if (oWin == true) {
System.out.println("O wins!");
}
}
}
考慮到這一點,如果你知道一個'line'不能再贏,你爲什麼會繼續檢查它?另外,如果你知道'X'或'O'已經贏了,爲什麼你會繼續檢查其他可能的勝利條件?像[分支語句](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html)(特別是'break'語句)可能會有所幫助 – MadProgrammer
請您舉個例子,實施失敗? – Codor
'如果(board [0] [0]!= board [i] [2-i])'在你的上次檢查中錯誤,它不是'[0] [0]',而是[0] [2] –