Не могу заставить мой метод (в 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).

Кроме того, я бы посоветовал вам не делать отступы, как у вас здесь. Я бы порекомендовал помещать каждое "другое, если" в отдельной строке.

Другие вопросы по тегам