【发布时间】:2016-05-27 02:47:15
【问题描述】:
我正在尝试制作一个双人井字游戏应用程序,它需要在同一个按钮 (b[][]) 上发生两件不同的事情,或者将文本 "" 转换为 "O",或者"X",取决于轮到谁了。
在这里,我有一个默认为 1 的标志,这应该表明它是玩家 1 (O) 的回合。运行程序,无论如何总是轮到玩家 2(X)。
我对@987654325@ 的工作原理有点困惑。我可以看到,也许条件 flag == 1 被立即调用,立即将标志设置为 0?对我来说,它没有首先将按钮文本设置为"O" 的过程仍然没有意义。怎么了?我该如何解决这个问题?
class MyClickListener implements View.OnClickListener {
int x;
int y;
public MyClickListener(int x, int y) {
this.x = x;
this.y = y;
}
public void onClick(View view) {
int flag = 1;
if (b[x][y].isEnabled()) {
b[x][y].setEnabled(false);
}
if(flag == 1) {
b[x][y].setText("O");
c[x][y] = 0;
textView.setText("player 1's turn");
checkBoard();
flag = 0;
}
if(flag == 0){
b[x][y].setText("X");
c[x][y] = 1;
textView.setText("player 2's turn");
checkBoard();
flag = 1;
}
}
}
【问题讨论】:
-
您在开始时将标志初始化为 1。
-
@Untitled123 是的,我知道,但程序的行为就像我已将其初始化为 0。它只是通过第二个条件,其中标志为 0。
-
你需要一个 else if 标志==0,因为它在第一个 if 中设置为 0,然后进入第二个 if。
-
@Untitled123 实际上,我现在看到这只是一个小疏忽,并不是真正的问题。考虑到我在条件句末尾尝试做的事情,我曾期望标志会切换。这就是让我感到困惑的部分。对不起。我会稍微修改一下问题。
-
我猜这个函数内部的初始化标志不是你想要的。考虑将该标志 init 放入构造函数中。
标签: java android button listener onclicklistener