我正在尝试弄清楚我正在尝试制作的这个小小的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的内容,则AB都必须求值为某种布尔值(即truefalse)。

另外,我鼓励您不要像在这里那样进行缩进。我建议将每个“ else if”放在自己的行上。

10-01 20:11