简体   繁体   中英

Can't seem to get my method (in Java) to compile correctly

I am trying to figure out exactly what is wrong with my winorTie method in this little tictacttoe game I am trying to create. Would anyone be able to help? Thanks

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;
            }
     }

}

Some of this was mentioned in the comments, but these conditions fundamentally don't make sense:

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;

For example, what do you think that if (gameboard [0][0] == && CROSS) [0][1] is supposed to do? What exactly is " "() supposed to be? And what do you think that == && does? It's difficult to know exactly what you were actually trying to achieve here.

Also, consider gameboard [0][-1] . There are two problems here. First, you do realize that -1 isn't actually a valid array index in Java, right? (That's allowable in Python, but not Java). Also, gameboard [0][-1] is an integer, not a bool, so && gameboard [0][-1] doesn't make sense. If you have something like A && B , both A and B must evaluate to some kind of boolean value (ie true or false ).

Also, I'd encourage you not to do indentation like you have here. I'd recommend putting each "else if" on its own line.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM