【发布时间】:2017-01-11 20:51:38
【问题描述】:
好的,所以我必须制作一个随机的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已经赢了,为什么还要继续检查其他可能的赢条件? Branching Statements 之类的东西(尤其是break语句)可能会有所帮助 -
您能否举一个实施失败的例子?
-
if(board[0][0] != board[i][2-i])在你最后的检查是错误的,不是[0][0]而是[0][2] -
@Codor XOX OXX OXX X 赢了!哦,赢了! XOO XXX OXX X 赢了!哦,赢了!
-
@MadProgrammer 我的问题是我不知道它在哪里继续检查,我只是尝试了你推荐的方法,我很确定我做错了。我一直在想太多,现在我一直在尝试的一切都不起作用。
标签: java