对象未在循环中更新(java)
Object not updating in loop(java)
我已经开始创建一个小的井字游戏,每次再次经过 lop 时,它应该通过更改对象位置在 '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++;
}
}
}
但是每次它似乎都在输出一个'X'。为什么会这样,我该如何解决?
更新:我不知道是否需要这样做,但我有来自 turn 方法的代码决定使用哪个对象:
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;
public class 用户 {
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:
所以我已经解决了我的大部分问题,唯一我还在想的事情(如果这是一个愚蠢的问题,我很抱歉),无论如何在循环中重用一个对象而不是每次都重新创建它循环是 运行。我问这个是因为我不想让我的 turn 变量每次都刷新为 0
board
中的值是通过在 for
循环中调用 use.getMark()
来设置的。鉴于 use
变量没有改变,这很可能 return 每次迭代都具有相同的值(除非它在内部迭代,这可能显示出设计缺陷)。您可以将板更改为 User[][]
,然后使用 board[x][y].getMark()
.
获得 'mark'
然而,更根本的是,让您的软件正常工作的最佳方法是使用您的代码构建单元测试。在尝试打印电路板之类的事情之前,您应该进行测试来证明 User
和 Player
符合您的预期。我建议,如果您在开发过程中学习单元测试,您遇到的问题就会少得多,而且您遇到的问题也更容易诊断和修复。这是一种比使用打印语句诊断问题更具可持续性的方法。
您使用的模型很不寻常。目前尚不清楚为什么您的方法有一个由任何其他对象无法访问的数组表示的板。这似乎毫无意义。我建议您可能希望 类 Board
、Player
、Move
正确分离职责。
我已经开始创建一个小的井字游戏,每次再次经过 lop 时,它应该通过更改对象位置在 '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++;
}
}
}
但是每次它似乎都在输出一个'X'。为什么会这样,我该如何解决?
更新:我不知道是否需要这样做,但我有来自 turn 方法的代码决定使用哪个对象:
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;
public class 用户 {
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:
所以我已经解决了我的大部分问题,唯一我还在想的事情(如果这是一个愚蠢的问题,我很抱歉),无论如何在循环中重用一个对象而不是每次都重新创建它循环是 运行。我问这个是因为我不想让我的 turn 变量每次都刷新为 0
board
中的值是通过在 for
循环中调用 use.getMark()
来设置的。鉴于 use
变量没有改变,这很可能 return 每次迭代都具有相同的值(除非它在内部迭代,这可能显示出设计缺陷)。您可以将板更改为 User[][]
,然后使用 board[x][y].getMark()
.
然而,更根本的是,让您的软件正常工作的最佳方法是使用您的代码构建单元测试。在尝试打印电路板之类的事情之前,您应该进行测试来证明 User
和 Player
符合您的预期。我建议,如果您在开发过程中学习单元测试,您遇到的问题就会少得多,而且您遇到的问题也更容易诊断和修复。这是一种比使用打印语句诊断问题更具可持续性的方法。
您使用的模型很不寻常。目前尚不清楚为什么您的方法有一个由任何其他对象无法访问的数组表示的板。这似乎毫无意义。我建议您可能希望 类 Board
、Player
、Move
正确分离职责。