我正在尝试弄清楚我正在尝试制作的这个小小的tictacttoe游戏中winorTie方法到底出了什么问题。有人可以帮忙吗?谢谢
package tictactoegame;
/**
*
* @author Douglas Boulden
*/
public class tictactoegame {
static int [][] gameboard;
static final int EMPTY = 0;
static final int NOUGHT = -1;
static final int CROSS = 1;
static void set (int val, int row) throws IllegalArgumentException {
int col = 0;
if (gameboard[row][col] == EMPTY)
gameboard[row][col] = val;
else throw new
IllegalArgumentException("Player already there!");
}
static void displayBoard () {
for (int[] gameboard1 : gameboard) {
System.out.print("|");
for (int c = 0; c < gameboard1.length; c++) {
switch (gameboard1[c]) {
case NOUGHT:
System.out.print("0");
break;
case CROSS:
System.out.print("X");
break;
default: //Empty
System.out.print(" ");
}
System.out.print("|");
}
System.out.println("\n------\n");
}
}
static void createBoard(int rows, int cols) {
gameboard = new int [rows] [cols];
}
static int winOrTie() {
if (gameboard [0][0] == NOUGHT && gameboard [0][-1])
return NOUGHT;
} else if (gameboard [0][0] == && CROSS) [0][1] {
return CROSS;
} else if (gameboard [0][0]== && " "()) [0][0] {
return 0;
} else {
return false;
}
/**
* @param args the command line arguments
*/ /**
* @param args the command line arguments
*/
public static void main(String[] args) {
createBoard(3,3);
int turn = 0;
int playerVal;
int outcome;
java.util.Scanner scan = new
java.util.Scanner(System.in);
do {
displayBoard();
playerVal = (turn % 2 == 0)? NOUGHT : CROSS;
if (playerVal == NOUGHT) {
System.out.println ("\n-0's turn-");
} else {
System.out.println("\n-X's turn-");
}
System.out.print("Enter row and Column:");
try {
set(playerVal, scan.nextInt());
} catch (IllegalArgumentException ex)
{System.err.println(ex);}
turn ++;
outcome = winOrTie();
} while ( outcome == -2 );
displayBoard();
switch (outcome) {
case NOUGHT:
System.out.println("0 wins!");
break;
case CROSS:
System.out.println("X wins!");
break;
case 0:
System.out.println("Tie.");
break;
}
}
}
最佳答案
评论中提到了其中一些,但是这些条件从根本上说不通:
if (gameboard [0][0] == NOUGHT && gameboard [0][-1])
return NOUGHT;
} else if (gameboard [0][0] == && CROSS) [0][1] {
return CROSS;
} else if (gameboard [0][0]== && " "()) [0][0] {
return 0;
例如,您认为
if (gameboard [0][0] == && CROSS) [0][1]
应该做什么? " "()
应该是什么?您认为== &&
有什么作用?很难确切地知道您实际上想要达到的目标。另外,请考虑
gameboard [0][-1]
。这里有两个问题。首先,您确实意识到-1实际上不是Java中有效的数组索引,对吗? (这在Python中是允许的,但在Java中是不允许的)。另外,gameboard [0][-1]
是整数,而不是布尔值,因此&& gameboard [0][-1]
没有任何意义。如果您有类似A && B
的内容,则A
和B
都必须求值为某种布尔值(即true
或false
)。另外,我鼓励您不要像在这里那样进行缩进。我建议将每个“ else if”放在自己的行上。