2d数组的tictactoe类是有问题的



对于这个程序,我正在创建将成为我必须构建的挠痒痒游戏的基础的板。这将是一个非常简单的程序,只使用java的基础知识。目前我有麻烦让我的setX()和setO()方法正常工作。这就是我用来建立我的两个方法的确切文本。

public void setX(int index)和public void setO(int index)如果index在board和BLANK范围内,则该方法应将X或O赋值到适当的索引在板(setX应该放置一个X;setO和O),记住TicTacToe传递1-9范围内的数字,但board中的索引小于1(在0-8的范围内)

我的具体问题是如何将'x'和'o'设置为适当的索引。当我运行我的单元测试文件(我使用bluejay)时,它通过这些方法失败了所有测试用例。它会返回第一个不同于元素[0][2](或[1][1]或数组中的任何组合)的数组;期望(或)但是是:

public class Board
{
    // instance variables - replace the example below with your own
    public int SIZE = 3;
    private char BLANK = 'N';
    private char [][] board;
    /**
     * Constructor for objects of class Board, intializes all elements to BLANK, 
     * creates board with SIZE elements
     */
  public Board()
    {
        // initialise instance variables
        board = new char[SIZE][SIZE];
        for(int i = 0; i < board.length; i++){
            for(int j = 0; j < board.length; j++){
                board[i][j] = BLANK;
        }
    }
   }
   /**
    * this method returns the board
    */
   public char [][] getBoard(){
       return board;
    }
    /**
     * prints the elements of the array board in a 3x3 grid
     */
   public void display(){
         for(int i = 0; i < board.length; i++){
            for(int j = 0; j < board.length; j++){
                System.out.print(board[i][j]);
        }
    }
   }
    /**
     * This method assigns X to the appropriate index in board
     */
   public void setX(int index){
       index = index - 1;
          for(int i = 0; i < board.length; i++){
            for(int j = 0; j < board.length; j++){
                if((BLANK <= index) && (index <= board[i][j])){
                    board[i][j] = 'X';
                }
        }
    }
    }
    /**
    * This method assigns O to the appropriate index in board
    */
   public void setO(int index){
       for(int i = 0; i < board.length; i++){
            for(int j = 0; j < board.length; j++){
                if((BLANK <= index) && (index <= board[i][j])){
                    board[i][j] = 'O';
                }
        }
    }
    }
   /**
    * This method returns true if the index is not occupied by an X or O
    */
    public boolean isAvailable(int index){
        boolean available = false;
        for(int i = 0; i < board.length; i++){
            for(int j = 0; j < board.length; j++){
                board[i][j] = BLANK;
               available = true;
        }
    }
        return available;
    }
}

首先,我想知道为什么您甚至需要一个二维数组。为什么不将棋盘表示为9个元素的单数组呢?

除此之外,将1-9位置索引转换为适当的二维索引的方法是:
int i = (index - 1) / 3;
int j = (index - 1) % 3;

然后处理board[i][j],只处理这一对索引。你的setXsetO方法不应该循环

想象你的板看起来像这样行标题是你的y "坐标"和列标题是你的x "坐标",表内容是你的索引,当你调用setXsetO:

  | 0 | 1 | 2
--+---+---+---
0 | 0 | 1 | 2
--+---+---+---
1 | 3 | 4 | 5
--+---+---+---
2 | 6 | 7 | 8

现在你需要做的就是计算2d数组的x和y值:

y = index / 3;
x = index % 3;

相关内容

  • 没有找到相关文章

最新更新