我已经开始创建一个小型的tic tac toe游戏,每次再次经过它时,它应该在' X'之间切换。和' O'通过更改对象位置:
int m=0;
while(m<=3){
Test t=new Test();
User use= t.turn();
System.out.println(use);
char[][] board=new char[3][3];
System.out.println(" 1 2 3");
for(int y=0;y<board.length;y++){
System.out.print(y+1);
for(int x=0;x<board.length;x++){
board[x][y]=use.getMark();
System.out.print("|"+board[x][y]+"|");
}
System.out.println();
m++;
}
}
}
然而,每次它似乎输出一个&#39; X&#39;。为什么这样,我该如何解决?
更新:我不知道是否需要这样做,但是我从轮到方法的代码中决定使用哪个对象:
public User turn(){
User use;
PlayerX playX=new PlayerX();
PlayerO playO=new PlayerO();
Board board=new Board();
int xturn=playX.getTurn();
int oturn=playO.getTurn();
if(xturn<=oturn){
use=playX;
System.out.println("X");
xturn++;
}else{
use=playO;
System.out.println("O");
oturn++;
}
System.out.println(xturn);
System.out.println(oturn);
return use;
}
package TicTacToe;
公共类用户{
private int XCoord;
private int YCoord;
private int Turn=0;
private char Mark;
public int getX(){
return XCoord;
}
public int getY(){
return YCoord;
}
public int getTurn(){
return Turn;
}
public char getMark(){
return Mark;
}
}
更新2:
所以我已经解决了我的大多数问题,我仍然想知道(我很抱歉,如果这是一个愚蠢的问题),无论如何都要在循环中重用一个对象而不是每次循环时重新创建它运行。我问这个是因为我不想每次将我的转弯变量刷新为0
答案 0 :(得分:0)
board
中的值是通过调用use.getMark()
循环中的for
来设置的。鉴于use
变量没有变化,这可能会在每次迭代时返回相同的值(除非它在内部迭代,这可能会显示设计缺陷)。您可以将电路板更改为User[][]
,然后获得标记&#39;使用board[x][y].getMark()
。
然而,更为根本的是,让软件正常工作的最佳方法是使用代码构建单元测试。在尝试打印电路板之前,您应该进行测试,证明User
和Player
符合您的预期。我建议如果你在开发过程中学会进行单元测试,那么问题就会少得多,你所拥有的问题会更容易诊断和修复。与使用print语句诊断问题相比,这是一种更可持续的方法。
您使用的模型非常不寻常。目前还不清楚为什么你的方法有一个由数组表示的板,任何其他对象都无法访问。这似乎毫无意义。我建议您可能希望课程Board
,Player
,Move
正确分离职责。