Java-检查MultiDimensional Array中的值

时间:2009-06-22 14:45:54

标签: java arrays multidimensional-array

我正在创建一个使用多维数组创建tictactoe游戏的任务,这是一个单独的类,主类可以调用方法。

数组为3 X 3并初始化为零。当玩家1选择棋盘上的位置时,将1放入该特定索引中。然后提示允许玩家2进行选择。每次玩家轮到一个方法时,会调用一个方法来检查棋盘是否完整,如果完成(用1和2'填充),则游戏称为平局。这种方法不能正常工作,它有时会在第二步中将游戏称为平局。这是我正在使用的方法。

public boolean isBoardComplete()
{
    // sets complete to true
    boolean complete = true;

    //will change complete to false
    for (int i = 0; i < 3; i++)
    {
        for(int j =0; j < 3; j++)
        {
            if (_board[i][j] == 0)
            {
                complete = false;
            }
        }
    }
    return complete;
}

6 个答案:

答案 0 :(得分:1)

此代码不会产生问题。在开始游戏之前,您需要确保电路板最初用零填充。我会打印出电路板状态以确保是这种情况。否则,请确保从此方法返回时正确使用布尔值。

答案 1 :(得分:1)

试试这个:

 public boolean isBoardComplete()
 {
   //will change complete to false
   for (int i = 0; i < 3; i++)
   {
     for(int j =0; j < 3; j++)
     {
        if (_board[i][j] == 0)
        {
            return false;
        }
     }
   }
  return true;
 }

答案 2 :(得分:1)

看起来问题出在makeMove()方法中。代码在移动后返回'false',并且从代码流中可以清楚地看到该方法应该返回'true'以进行有效移动。

试试这个

    public boolean makeMove( int row, int col) { 
        row = row - 1; col = col - 1;

        // Checks to see if board location is occupied and a move can be made
        if (_board[row][col] == 0)
        {
            _board[row][col] = _player;
            return true;
        }
        return false;

    }

答案 3 :(得分:0)

数组是声明为Integer数组还是int数组?如果您使用==和自动取消装箱,这将有所不同(即使数量较小,它们应该被缓存)。

除此之外,我会说你的数组没有正确初始化。发布调用此方法的代码以及初始化数组的代码。问题很可能在于这两个地方之一。

答案 4 :(得分:0)

如果您使用的是JAVA 5或更高版本,则可以使用Arrays.deepEquals方法。从javadocs开始,“此方法适用于任意深度的嵌套数组。”

示例: -

  String[][] ticTacToe = { {"X", "O", "O"},
                             {"O", "X", "X"},
                             {"X", "O", "X"}};
    System.out.println(Arrays.deepToString(ticTacToe));

    String[][] ticTacToe2 = { {"O", "O", "X"},
                              {"O", "X", "X"},
                              {"X", "O", "X"}};

    String[][] ticTacToe3 = { {"X", "O", "O"},
                              {"O", "X", "X"},
                              {"X", "O", "X"}};

    if (Arrays.deepEquals(ticTacToe, ticTacToe2)) {
      System.out.println("Boards 1 and 2 are equal.");
    } else {
      System.out.println("Boards 1 and 2 are not equal.");
    }

    if (Arrays.deepEquals(ticTacToe, ticTacToe3)) {
      System.out.println("Boards 1 and 3 are equal.");
    } else {
      System.out.println("Boards 1 and 3 are not equal.");
    }
  }

答案 5 :(得分:0)

这是我的代码。我有主要课程(TicTacToeApplication)和TTTboard课程。

import java.util.Scanner;

public class TicTacToeApplication {

    public static void main(String[] args)
    {
        // declare variables including our TTT board

        TTTBoard myGame = new TTTBoard();
        Scanner input = new Scanner(System.in);
        int row;
        int col;


        while(myGame.determineWinner() == 0 && !myGame.isBoardComplete())
        {

            myGame.displayBoard();


            System.out.println("Player " + myGame.getCurrentPlayer());
            System.out.println("Make your move.");
            System.out.print("Row please (1-3):");
            row = input.nextInt();


            while(row < 1 || row > 3)
            {
                System.out.println("Invalid Row.");
                System.out.print("Try again (1-3):");
                row = input.nextInt();
            }

            System.out.print("Col please (1-3):");
            col = input.nextInt();


            while(col < 1 || col > 3)
            {
                System.out.println("Invalid Col.");
                System.out.print("Try again (1-3):");
                col = input.nextInt();
            }

            // while the move is invalid make them make another move
            while(!myGame.makeMove(row, col))
            {
                System.out.println("Invalid Move... Try Again.");
                System.out.print("Row please (1-3):");
                row = input.nextInt();

                // error trap for valid row
                while(row < 1 || row > 3)
                {
                    System.out.println("Invalid Row.");
                    System.out.print("Try again (1-3):");
                    row = input.nextInt();
                }

                System.out.print("Col please (1-3):");
                col = input.nextInt();

                // error trap for valid col
                while(col < 1 || col > 3)
                {
                    System.out.println("Invalid Col.");
                    System.out.print("Try again (1-3):");
                    col = input.nextInt();
                }
            }
        }

        // if we left the loop because the boards full and there's no winner
        // it must be a cats game
        if (myGame.determineWinner() == 0)
        {
            System.out.println("Sorry - Cat's Game");
        }
        else
        {
            System.out.print("The Winner is Player ");
            if (myGame.getCurrentPlayer() == 1)
            {
                System.out.println("2");
            }
            else
            {
                System.out.println("1");
            }
        }
    }

}

public class TTTBoard
{

   private int [][] _board;
   private int _player;


   public TTTBoard ()
   {
       _player = 0;
       _board = new int [3][3];

       for (int row = 0; row < 3; row++)
       {    
           for(int column = 0; column < 3; column++)
           {
              _board[row][column] = 0;
           }
       }
    }


   public boolean makeMove( int row, int col)
   {
        row = row - 1;
        col = col - 1;

        // Checks to see if board location is occupied and a move can be made

        if (_board[row][col] == 0)
        {
            _board[row][col] = _player;
            return false;
        }
        else
        {
            return true;
        }
   }


   public boolean isBoardComplete ()
   {
       for (int row = 0; row < 3; row++)
       {
           for (int column = 0; column <3; column++)
           {
               if (_board [row][column] == 0)
               {
                   return false;
               }

           }
       }

       return true;
   }


   public int determineWinner ()
   {
        // First check rows and columns
          int winner = 0;

        // Check for winner in row 1
        if (_board[0][0] == _board[0][1] && _board[0][0] == _board[0][2] &&
                _board[0][0] != 0)
        {
            winner = _board[0][0];
        }

        // Check for winner in row 2
        if (_board[1][0] == _board[1][1] && _board[1][0] == _board[1][2] &&
                _board[1][0] != 0)
        {
            winner = _board[1][0];
        }

        // Check for winner in row 3
        if (_board[2][0] == _board[2][1] && _board[2][0] == _board[2][2] &&
                _board[2][0] != 0)
        {
            winner = _board[2][0];
        }

        // Check for winner in col 1
        if (_board[0][0] == _board[1][0] && _board[0][0] == _board[2][0] &&
                _board[0][0] != 0)
        {
            winner = _board[0][0];
        }

        // Check for winner in col 2
        if (_board[0][1] == _board[1][1] && _board[0][1] == _board[2][1] &&
                _board[0][1] != 0)
        {
            winner = _board[0][1];
        }

        // Check for winner in col 3
        if (_board[0][2] == _board[1][2] && _board[0][2] == _board[2][2] &&
                _board[0][2] != 0)
        {
            winner = _board[0][2];
        }

        // Check for winner in first diagonal
        if (_board[0][0] == _board[1][1] && _board[0][0] == _board[2][2] &&
                _board[0][0] != 0)
        {
            winner = _board[0][0];
        }
        // Check for winner in 2nd diagonal
        if (_board[2][0] == _board[1][1] && _board[2][0] == _board[0][2] &&
                _board[2][0] != 0)
        {
            winner = _board[2][0];
        }

        return winner;
    }


   public void displayBoard()
   {
        System.out.println();

        for (int r=0; r<_board.length; r++)
        {

            for (int c=0; c<_board[r].length; c++)
            {

                System.out.print(" " + _board[r][c]);
            }

            System.out.println("");
        }

   }


   public int getCurrentPlayer ()
   {
       if (_player == 0)
       {
            return _player = 1;
       }
       if (_player == 1)
       {
           return _player = 2;
       }
       else
       {
           return _player = 1;
       }

   }
}