Java 井字游戏-数组不保存值?
我正在创建一个Tic-Tac-Toe游戏(带有GUI),我正在使用2D数组来确定胜利者。我发现,在用户单击电路板上的某个点后,阵列不会保存以前的值 因此,如果板[0][0]为“X”,则阵列为Java 井字游戏-数组不保存值?,java,arrays,Java,Arrays,我正在创建一个Tic-Tac-Toe游戏(带有GUI),我正在使用2D数组来确定胜利者。我发现,在用户单击电路板上的某个点后,阵列不会保存以前的值 因此,如果板[0][0]为“X”,则阵列为 [[X, 2, 3], [4, 5, 6], [7, 8, 9]] 之后,如果用户单击板[1][1],则阵列应为: [[X, 2, 3], [4, X, 6], [7, 8, 9]] 但事实是: [[1, 2, 3], [4, X, 6], [7, 8, 9]] 为什么会发生这种情况 代码如下: pr
[[X, 2, 3], [4, 5, 6], [7, 8, 9]]
之后,如果用户单击板[1][1],则阵列应为:
[[X, 2, 3], [4, X, 6], [7, 8, 9]]
但事实是:
[[1, 2, 3], [4, X, 6], [7, 8, 9]]
为什么会发生这种情况
代码如下:
private class Play implements ActionListener{
public void actionPerformed(ActionEvent event){
JButton src = (JButton) event.getSource();
//create board
String[][] board = { {"1","2","3"},
{"4","5","6"},
{"7","8","9"}
};
// who's turn?
count++;
if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9 )
letter = playerChoice;
else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
letter = computerChoice;
//player choice - show button
if(src.equals(one)){
one.setText(letter);
one.setEnabled(false);
board[0][0]= letter;
}else if(src.equals(two)){
two.setText(letter);
two.setEnabled(false);
board[0][1] = letter;
}else if(src.equals(three)){
three.setText(letter);
three.setEnabled(false);
board[0][2] = letter;
}else if(src.equals(four)){
four.setText(letter);
four.setEnabled(false);
board[1][0] = letter;
}else if(src.equals(five)){
five.setText(letter);
five.setEnabled(false);
board[1][1] = letter;
}else if(src.equals(six)){
six.setText(letter);
six.setEnabled(false);
board[1][2] = letter;
}else if(src.equals(seven)){
seven.setText(letter);
seven.setEnabled(false);
board[2][0] = letter;
}else if(src.equals(eight)){
eight.setText(letter);
eight.setEnabled(false);
board[2][1] = letter;
}else if(src.equals(nine)){
nine.setText(letter);
nine.setEnabled(false);
board[2][2] = letter;
}
System.out.println(Arrays.deepToString(board));
您正在创建一个新的局部变量,
board
每次调用actionPerformed
private class Play implements ActionListener {
public void actionPerformed(ActionEvent event) {
JButton src = (JButton) event.getSource();
//create board
String[][] board = {{"1", "2", "3"},
{"4", "5", "6"},
{"7", "8", "9"}
};
//...
这意味着状态不会在两次调用之间保存,而是在每次调用时重新创建
相反,board
应该是一个实例字段,例如
private class Play implements ActionListener {
private String[][] board = {{"1", "2", "3"},
{"4", "5", "6"},
{"7", "8", "9"}
};
public void actionPerformed(ActionEvent event) {
JButton src = (JButton) event.getSource();
count++;
if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9 )
letter = playerChoice;
else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
letter = computerChoice;
//...
提示:要检查偶数/奇数,您可以使用运算符。问题是,为什么要使用运算符?您已经在
actionPerformed
方法内创建了一个局部变量board
,一旦该方法存在,该变量就不再存在exists@NoamHacker谢谢你的提示!但我没有检查奇数/偶数。。该程序似乎是在玩家每次点击时创建一个新的棋盘(数组),而不是使用一个棋盘(数组)@hamethyst你觉得怎么样String[][]棋盘={{“1”、“2”、“3”}、{“4”、“5”、“6”}、{“7”、“8”、“9”}每次调用actionPerformed
时,code>都在做什么?@MadProgrammer因此每次操作(用户单击按钮)后,旧变量都不存在?这是否意味着我应该创建一个单独的类来确定获胜者?哦。。。哇!我现在明白我的错误了。那太愚蠢了。谢谢你的帮助!!欢迎来到森林,注意树木;)