【问题标题】:tic tac toe using methods javatic tac toe 使用方法 java
【发布时间】:2015-11-23 17:48:35
【问题描述】:

代码应该是玩tictactoe的,但是print game board方法出现异常,越界异常,我不知道为什么。如果有人知道如何避免该异常,我将不胜感激。这是我目前所拥有的:

 static char arrayList[][] = {{0,1,2},{0,1,2}};
 static Scanner input;
 public static void main(String[] args) {
 // Only one scanner!!!
 input = new Scanner(System.in);
 while (true) { // TTT 4 forever!
 printGameBoard();
 userInput();
 if (checkForWin('X')) {
 System.out.println("Congrats, you won!");
 break;
 }
 if (checkForStale()) {
 printGameBoard();
 System.out.println("Tie!");
 break;
 }
 computerTurn();
 if (checkForWin('O')) {
 System.out.println("All hail the future overlords!");
 break;
 }
 if (checkForStale()) {
 System.out.println("Tie!");
 break;
 }
 }
 }
 static void printGameBoard() {
 System.out.println("+---+---+---+");
 System.out.println("| " + arrayList[0][0] + " | " + arrayList[0][1] + " | " + arrayList[0][2]
 + " |");
 System.out.println("+---+---+---+");
 System.out.println("| " + arrayList[1][0] + " | " + arrayList[1][1] + " | " + arrayList[1][2]
 + " |");
 System.out.println("+---+---+---+");
 System.out.println("| " + arrayList[2][0] + " | " + arrayList[2][1] + " | " + arrayList[2][2]
 + " |");
 System.out.println("+---+---+---+");
 }
 static void userInput() {
 System.out.print("Please enter the board number:");
 int place = input.nextInt();
// Note to self: check user input for sanity here!
 if (checkForSanity(place)) {
 placeOnBoard(place, 'X');
 System.out.println("Ok...");
 printGameBoard();
 } else {
 System.out.println("Wrong move!");
 }
 }
 static void computerTurn() {
 boolean placed = false;
 while (!placed) {
 // Randomly choose a place
 int place = (int) (1 + (Math.random() * 8));
 // Check if sane
 if (checkForSanity(place)) {
 placeOnBoard(place, 'O');
 placed = true;
 }
 }
 printGameBoard();
 }
 static boolean checkForWin(char piece) {
 if ((arrayList[0][0] == piece) && (arrayList[0][1] == piece) && (arrayList[0][2] == piece))
 return true;
 if ((arrayList[1][0] == piece) && (arrayList[1][1] == piece) && (arrayList[1][2] == piece))
 return true;
 if ((arrayList[2][0] == piece) && (arrayList[2][1] == piece) && (arrayList[2][2] == piece))
 return true;
 if ((arrayList[0][0] == piece) && (arrayList[1][0] == piece) && (arrayList[2][0] == piece))
 return true;
 if ((arrayList[0][1] == piece) && (arrayList[1][1] == piece) && (arrayList[2][1] == piece))
 return true;
 if ((arrayList[0][2] == piece) && (arrayList[1][2] == piece) && (arrayList[2][2] == piece))
 return true;
 if ((arrayList[0][0] == piece) && (arrayList[1][1] == piece) && (arrayList[2][2] == piece))
 return true;
 if ((arrayList[0][2] == piece) && (arrayList[1][1] == piece) && (arrayList[2][0] == piece))
 return true;
 return false;
 }
 static boolean checkForStale() {
 if ((arrayList[0][0] != ' ') && (arrayList[0][1] != ' ') && (arrayList[0][2] != ' ')
 && (arrayList[1][0] != ' ') && (arrayList[1][1] != ' ') && (arrayList[1][2] != ' ')
 && (arrayList[2][0] != ' ') && (arrayList[2][1] != ' ') && (arrayList[2][2] != ' '))
 return true;
 return false;
 }
 static void placeOnBoard(int place, char piece) {
 if (place == 1)
 arrayList[0][0] = piece;
 else if (place == 2)
 arrayList[0][1] = piece;
 else if (place == 3)
 arrayList[0][2] = piece;
 else if (place == 4)
 arrayList[1][0] = piece;
 else if (place == 5)
 arrayList[1][1] = piece;
 else if (place == 6)
 arrayList[1][2] = piece;
 else if (place == 7)
 arrayList[2][0] = piece;
 else if (place == 8)
 arrayList[2][1] = piece;
 else if (place == 9)
 arrayList[2][2] = piece;
 }
 static boolean checkForSanity(int place) {
 boolean sane = false;
 if ((place == 1) && (arrayList[0][0] == ' '))
 sane = true;
 else if ((place == 2) && (arrayList[0][1] == ' '))
 sane = true;
 else if ((place == 3) && (arrayList[0][2] == ' '))
 sane = true;
 else if ((place == 4) && (arrayList[1][0] == ' '))
 sane = true;
 else if ((place == 5) && (arrayList[1][1] == ' '))
 sane = true;
 else if ((place == 6) && (arrayList[1][2] == ' '))
 sane = true;
 else if ((place == 7) && (arrayList[2][0] == ' '))
 sane = true;
 else if ((place == 8) && (arrayList[2][1] == ' '))
 sane = true;
 else if ((place == 9) && (arrayList[2][2] == ' '))
 sane = true;
 return sane;
 }
 static boolean checkForSanity(int row, int col) {
 return true;
 }
}

`

【问题讨论】:

  • 那是什么异常?

标签: java tic-tac-toe


【解决方案1】:

我认为问题在于您对 arrayList 的初始化。您已将其定义为 2 行和 3 列。此外,您将其初始化为整数 0、1、2,而不是字符 '0'、'1'、'2',因此在打印时,它将打印控制字符。

我建议像这样创建它:

char[][] arrayList = new char[3][3];

这会给你留下一个空板(所有单元格都将为空。

【讨论】:

    【解决方案2】:

    查看线路

     static char arrayList[][] = {{0,1,2},{0,1,2}};
    

    您只声明一个 2x3 数组。尝试再添加一行使其成为 3x3。

    tatic char arrayList[][] = {{0,1,2},{0,1,2},{0,1,2}};
    

    【讨论】:

      【解决方案3】:

      这是因为您超出了数组维度的范围。特别是您的第一个维度只能是 0 或 1,而您的第二个维度可以是 0、1 或 2。

      鉴于此:

      static char arrayList[][] = {{0,1,2},{0,1,2}};
      

      这将是无效的:

      arrayList[2][0]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多