2014-10-10 2 views
0

Я изучаю Java и работаю над простой игрой Tic-Tac-Toe. Я считаю, что все работает нормально, за исключением того, что оператор IF не выполняется. Поэтому, когда игрок получает три X в строке или по диагонали, оператор IF не выполняет. Однако оба утверждения ELSE IF работают отлично, когда игроки связывают или получают три O. Любая помощь приветствуется!Оператор IF не выполняется, но инструкции ELSE IF работают нормально

public static void check_status() 
{ 
    if ( (board[0][0]=='X' && board[0][1]=='X' && board[0][2]=='x') || 
      (board[1][0]=='X' && board[1][1]=='X' && board[1][2]=='x') || 
      (board[2][0]=='X' && board[2][1]=='X' && board[2][2]=='x') || 

      (board[0][0]=='X' && board[1][0]=='X' && board[2][0]=='x') || 
      (board[0][1]=='X' && board[1][1]=='X' && board[2][1]=='x') || 
      (board[0][2]=='X' && board[1][2]=='X' && board[2][2]=='x') || 

      (board[0][0]=='X' && board[1][1]=='X' && board[2][2]=='x') || 
      (board[0][2]=='X' && board[1][1]=='X' && board[2][0]=='x')) 
    { 
     System.out.println(); 
     System.out.println("X wins the game!"); 
     end_game = 1; 
    } 

    else if ( (board[0][0]=='O' && board[0][1]=='O' && board[0][2]=='O') || 
      (board[1][0]=='O' && board[1][1]=='O' && board[1][2]=='O') || 
      (board[2][0]=='O' && board[2][1]=='O' && board[2][2]=='O') || 

      (board[0][0]=='O' && board[1][0]=='O' && board[2][0]=='O') || 
      (board[0][1]=='O' && board[1][1]=='O' && board[2][1]=='O') || 
      (board[0][2]=='O' && board[1][2]=='O' && board[2][2]=='O') || 

      (board[0][0]=='O' && board[1][1]=='O' && board[2][2]=='O') || 
      (board[0][2]=='O' && board[1][1]=='O' && board[2][0]=='O')) 
    { 
     System.out.println(); 
     System.out.println("O wins the game!"); 
     end_game = 1; 
    } 


    else if ( (board[0][0]!=' ' && board[0][1]!=' ' && board[0][2]!=' ') && 
       (board[1][0]!=' ' && board[1][1]!=' ' && board[1][2]!=' ') && 
       (board[2][0]!=' ' && board[2][1]!=' ' && board[2][2]!=' ')) 
    { 
     System.out.println(); 
     System.out.println("The game is a tie."); 
     end_game = 1; 
    } 
} 

Кроме того, это первый раз, когда я отправил на переполнении стека, так извинения, если вопрос или форматирование неуместно.

Полный код:

import java.util.Scanner; 

public class TicTacToe 
{ 

    private static char[][] board = new char[3][3]; 

    private static int end_game = 0; 

    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 

     initBoard(); 
     displayBoard(); 

     do 
     { 

      System.out.println(); 
      System.out.print("\'O\', choose your location (row, column): "); 
      int O_row = keyboard.nextInt(); 
      int O_col = keyboard.nextInt(); 
      board[O_row][O_col] = 'O'; 
      System.out.println(); 
      displayBoard(); 
      check_status(); 
      if (end_game==1){ 
       break; 
      } 
      System.out.println(); 
      System.out.print("\'X\', choose your location (row, column): "); 
      int X_row = keyboard.nextInt(); 
      int X_col = keyboard.nextInt(); 
      board[X_row][X_col] = 'X'; 
      System.out.println(); 
      displayBoard(); 
      check_status(); 

     } while (end_game==0); 
    } 

    public static void check_status() 
    { 
     if ( (board[0][0]=='X' && board[0][1]=='X' && board[0][2]=='x') || 
       (board[1][0]=='X' && board[1][1]=='X' && board[1][2]=='x') || 
       (board[2][0]=='X' && board[2][1]=='X' && board[2][2]=='x') || 

       (board[0][0]=='X' && board[1][0]=='X' && board[2][0]=='x') || 
       (board[0][1]=='X' && board[1][1]=='X' && board[2][1]=='x') || 
       (board[0][2]=='X' && board[1][2]=='X' && board[2][2]=='x') || 

       (board[0][0]=='X' && board[1][1]=='X' && board[2][2]=='x') || 
       (board[0][2]=='X' && board[1][1]=='X' && board[2][0]=='x')) 
     { 
      System.out.println(); 
      System.out.println("X wins the game!"); 
      end_game = 1; 
     } 

     else if ( (board[0][0]=='O' && board[0][1]=='O' && board[0][2]=='O') || 
       (board[1][0]=='O' && board[1][1]=='O' && board[1][2]=='O') || 
       (board[2][0]=='O' && board[2][1]=='O' && board[2][2]=='O') || 

       (board[0][0]=='O' && board[1][0]=='O' && board[2][0]=='O') || 
       (board[0][1]=='O' && board[1][1]=='O' && board[2][1]=='O') || 
       (board[0][2]=='O' && board[1][2]=='O' && board[2][2]=='O') || 

       (board[0][0]=='O' && board[1][1]=='O' && board[2][2]=='O') || 
       (board[0][2]=='O' && board[1][1]=='O' && board[2][0]=='O')) 
     { 
      System.out.println(); 
      System.out.println("O wins the game!"); 
      end_game = 1; 
     } 


     else if ( (board[0][0]!=' ' && board[0][1]!=' ' && board[0][2]!=' ') && 
        (board[1][0]!=' ' && board[1][1]!=' ' && board[1][2]!=' ') && 
        (board[2][0]!=' ' && board[2][1]!=' ' && board[2][2]!=' ')) 
     { 
      System.out.println(); 
      System.out.println("The game is a tie."); 
      end_game = 1; 
     } 
    } 

    public static void initBoard() 
    { 
     // fills up the board with blanks 
     for (int r=0; r<3; r++) 
      for (int c=0; c<3; c++) 
       board[r][c] = ' '; 
    } 


    public static void displayBoard() 
    { 
     System.out.println(" 0 " + board[0][0] + "|" + board[0][1] + "|" + board[0][2]); 
     System.out.println(" --+-+--"); 
     System.out.println(" 1 " + board[1][0] + "|" + board[1][1] + "|" + board[1][2]); 
     System.out.println(" --+-+--"); 
     System.out.println(" 2 " + board[2][0] + "|" + board[2][1] + "|" + board[2][2]); 
     System.out.println("  0 1 2 "); 
    } 

} 
+1

Использовали ли вы маленькие символы «x» в последних частях вашего И? – padde

ответ

4
board[0][2]=='x' 

Вы используете большой X в два первых столбца, а в последней небольшой x, что может быть источником проблемы

+0

Большое вам спасибо! – nicknaky

0

Вы должны взгляните на X s и x, которые вы используете в своем коде. Символы чувствительны к регистру.

Смежные вопросы