Не могу заставить мой метод (в Java) правильно скомпилировать
Я пытаюсь выяснить, что именно не так с моим методом 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;
}
}
}
1 ответ
Часть этого была упомянута в комментариях, но эти условия принципиально не имеют смысла:
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
).
Кроме того, я бы посоветовал вам не делать отступы, как у вас здесь. Я бы порекомендовал помещать каждое "другое, если" в отдельной строке.