对于这个程序,我正在创建一个板,这将是我必须构建的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范围内的数字,但是板上的指数小于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;
}
}
答案 0 :(得分:1)
首先,我想知道为什么你甚至需要一个二维数组。为什么不将电路板表示为九元素单个阵列?
除此之外,从1-9位置索引转换为适当的二维索引的方法是:
int i = (index - 1) / 3;
int j = (index - 1) % 3;
然后仅针对那一对索引处理board[i][j]
。您的setX
和setO
方法不应该循环播放。
答案 1 :(得分:0)
想象你的电路板看起来像这个行标题是你的坐标&#34;和列标题是x&#34;坐标&#34;,当您拨打setX
或setO
时,表格内容就是您的索引:
| 0 | 1 | 2
--+---+---+---
0 | 0 | 1 | 2
--+---+---+---
1 | 3 | 4 | 5
--+---+---+---
2 | 6 | 7 | 8
现在,您需要做的就是计算二维数组的x和y值,如下所示:
y = index / 3;
x = index % 3;