所以,我创建了一个实现onClickListener
的java类,在这个类中我编写了onClick
公共方法。在这个方法之外,我创建了一个int对象,我想在onClick
方法中修改这个对象。我通过检查其他类似的 SO 问题进行了大量研究,我尝试了很多方法,例如将对象创建为 public int ,或者将其设为私有int 并有另一种方法来更改它,然后在onClick中调用此方法。然而,似乎没有任何作用。
下面显示的代码将int对象创建为 private int 并命名为turn
。要在onClick
中更改它,我首先创建了一个名为changeTurn
的公共方法,修改它,然后在onClick
中调用此方法。
public class TicTacToe implements View.OnClickListener {
Button buttons[] = new Button[9];
TextView result;
public TicTacToe(Button[] buttonList, TextView text) {
buttons = buttonList;
result = text;
}
//public void
private int turn = 1; // The object that needs to be modified in onCLick
@Override
public void onClick(View v) {
Button b = (Button) v;
if((((Button) v).getText() != "X") && (((Button) v).getText() != "O")) {
if(this.turn == 1) {
b.setText("X");
changeTurn(); // ***Should change the value of turn***
result.setText("Turn is: " + this.turn);
}
if(this.turn == 2) {
b.setText("O");
changeTurn(); // ***Should change the value of turn***
result.setText("Turn is: " + turn);
}
}
}
public void changeTurn() {
if(this.turn == 1) {
this.turn = 2;
}
if(this.turn == 2) {
this.turn = 1;
}
}
}
根据我的尝试,只要我点击我的9个按钮中的任何一个,其setOnClickListeners连接到这个onClick方法,程序就会在第一个 if 内部进行。此外,当我将其打印出来时, turn 的值始终为1,这基本上意味着onClick方法中的changeTurn不会更改其值。
关于应用程序的一般信息:我正在尝试使用9个按钮在3x3网格中制作一个井字游戏。由于会有2个玩家,我正在尝试使用此转整数来跟踪按下按钮的转向。如果turn为1,则按钮的文本变为X,如果turn为2,则变为O.现在,每按一次按钮,它总是变为X.
我真的很感激任何帮助或想法。
答案 0 :(得分:2)
您将转弯设置为2,然后立即将其设置为1。
// turn == 1
if(this.turn == 1) { // true
this.turn = 2; // turn == 2
}
if(this.turn == 2) { // now true!
this.turn = 1; // turn == 1
}
最简单的方法是只在跳过第一个块时输入第二个块,即:
if(this.turn == 1) {
this.turn = 2;
} else if(this.turn == 2) {
this.turn = 1;
}
或者,如果您希望使用更多转数来扩展块,请使用开关:
switch(this.turn) {
case 1:
this.turn = 2;
break;
case 2:
this.turn = 1;
break;
}
切换的唯一问题是,如果你忘记了一个中断语句,你最终会出现无法预测的混乱。
最后,一点建议:如果你试图创建一个数字循环(1 .. n然后又回到1)那么你应该考虑模数运算符(%),如x = x % n + 1;
答案 1 :(得分:1)
尝试像这样使用
final private int[] turn = {0}
然后将代码更改为
if(turn[0] == 1) {
b.setText("X");
turn[0]=2; // ***Should change the value of turn***
result.setText("Turn is: " + turn);
}
if(turn[0] == 2) {
b.setText("O");
turn[0]=1; // ***Should change the value of turn***
result.setText("Turn is: " + turn);
}