Android Studio 的计数器递增错误
Counter for Android Studio increments wrong
我正在制作井字游戏 android 应用程序,我希望保留分数。除了增量之外,我一切正常。由于某种原因,它没有上升 1,而是上升了 2。
这是我在增加分数和检查游戏以查看是否有赢家时使用的方法:
private Button one;
private Button two;
private Button three;
private Button four;
private Button five;
private Button six;
private Button seven;
private Button eight;
private Button nine;
private TextView winner;
private Button clearBoard;
private int scoreX;
private int scoreY;
private int tie;
private boolean turn = false; //determines who's turn it is
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
one = (Button) findViewById(R.id.box1);
one.setText("-");
two = (Button) findViewById(R.id.box2);
two.setText("-");
three = (Button) findViewById(R.id.box3);
three.setText("-");
four = (Button) findViewById(R.id.box4);
four.setText("-");
five = (Button) findViewById(R.id.box5);
five.setText("-");
six = (Button) findViewById(R.id.box6);
six.setText("-");
seven = (Button) findViewById(R.id.box7);
seven.setText("-");
eight = (Button) findViewById(R.id.box8);
eight.setText("-");
nine = (Button) findViewById(R.id.box9);
nine.setText("-");
scoreX = 0;
scoreY = 0;
tie = 0;
winner = (TextView) findViewById(R.id.win);
clearBoard = (Button) findViewById(R.id.newgame);
clearBoard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
one.setText("-");
one.setEnabled(true);
two.setText("-");
two.setEnabled(true);
three.setText("-");
three.setEnabled(true);
four.setText("-");
four.setEnabled(true);
five.setText("-");
five.setEnabled(true);
six.setText("-");
six.setEnabled(true);
seven.setText("-");
seven.setEnabled(true);
eight.setText("-");
eight.setEnabled(true);
nine.setText("-");
nine.setEnabled(true);
}
});
}
public void game(View view) {
Button b = (Button) view;
moves(b);
}
public void moves(Button b){
if(turn == false){
b.setText("X");
b.setTextSize(15);
} else {
b.setText("O");
b.setTextSize(15);
}
//once X or O is placed, cannot reuse that button till new game
b.setEnabled(false);
b.setTextSize(15);
turn = !turn;
check();
//if there is a winner, make it so buttons can't be pressed and new game must start
if(check() == true){
one.setEnabled(false);
two.setEnabled(false);
three.setEnabled(false);
four.setEnabled(false);
five.setEnabled(false);
six.setEnabled(false);
seven.setEnabled(false);
eight.setEnabled(false);
nine.setEnabled(false);
}
}
public boolean check() {
boolean finished = true;
int player = 1; //1 is player X, 0 is player O, 2 is a tie
//horizontal check
if((!one.getText().equals("-")) && one.getText().toString().equals(two.getText().toString()) && two.getText().toString().equals(three.getText().toString())) {
if (one.getText().equals("O")) {
player = 0;
}
} else if((!four.getText().equals("-")) && four.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(six.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if((!seven.getText().equals("-")) && seven.getText().toString().equals(eight.getText().toString()) && eight.getText().toString().equals(nine.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if((!one.getText().equals("-")) && one.getText().toString().equals(four.getText().toString()) && four.getText().toString().equals(seven.getText().toString())){
//vertical check
if (one.getText().equals("O")) {
player = 0;
}
} else if((!two.getText().equals("-")) && two.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(eight.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if((!three.getText().equals("-")) && three.getText().toString().equals(six.getText().toString()) && six.getText().toString().equals(nine.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if((!one.getText().equals("-")) && one.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(nine.getText().toString())){
//diagonal check
if (one.getText().equals("O")) {
player = 0;
}
} else if((!three.getText().equals("-")) && three.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(seven.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if ((!one.getText().equals("-")) && (!two.getText().equals("-")) && (!three.getText().equals("-")) && (!four.getText().equals("-")) && (!five.getText().equals("-"))
&& (!six.getText().equals("-")) && (!seven.getText().equals("-")) && (!eight.getText().equals("-")) && (!nine.getText().equals("-"))){
player = 2;
} else {
return finished = false;
}
if(player == 1){
scoreX = scoreX + 1;
winner.setText(String.format("Player X is the winner!\nGames won by player X: %d\nGames won by player O: %d\nNumber of ties: %d", scoreX, scoreY, tie));
} else if (player == 0){
scoreY = scoreY + 1;
winner.setText(String.format("Player O is the winner!\nGames won by player X: %d\nGames won by player O: %d\nNumber of ties: %d", scoreX, scoreY, tie));
} else if(player == 2){
tie= tie + 1;
winner.setText(String.format("It's a tie!\nGames won by player X: %d\nGames won by player O: %d\nNumber of ties: %d", scoreX, scoreY, tie));
}
return finished;
}
}
我的变量 scoreX、scoreY 和 tie 都是成员变量并设置为 0。我一定是遗漏了一些东西,因为我看不到我的变量是如何递增 2 而不是 1 的。请帮忙!
编辑:我知道编码不太好。我还是个初学者。我添加了我所有的代码。我特别知道我的 check() 方法很长,但我不确定如何缩短它的长度,因为我正在检查游戏板上的按钮。
发生这种情况是因为您调用了两次检查函数:
我真的不能给你行号,但这是它发生的地方(在 moves 函数中):
check();
//if there is a winner, make it so buttons can't be pressed and new game must start
if(check() == true){
您应该做的是保存第一次检查调用的结果,然后使用它:
boolean result = check();
//if there is a winner, make it so buttons can't be pressed and new game must start
if(result == true){
我正在制作井字游戏 android 应用程序,我希望保留分数。除了增量之外,我一切正常。由于某种原因,它没有上升 1,而是上升了 2。
这是我在增加分数和检查游戏以查看是否有赢家时使用的方法:
private Button one;
private Button two;
private Button three;
private Button four;
private Button five;
private Button six;
private Button seven;
private Button eight;
private Button nine;
private TextView winner;
private Button clearBoard;
private int scoreX;
private int scoreY;
private int tie;
private boolean turn = false; //determines who's turn it is
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
one = (Button) findViewById(R.id.box1);
one.setText("-");
two = (Button) findViewById(R.id.box2);
two.setText("-");
three = (Button) findViewById(R.id.box3);
three.setText("-");
four = (Button) findViewById(R.id.box4);
four.setText("-");
five = (Button) findViewById(R.id.box5);
five.setText("-");
six = (Button) findViewById(R.id.box6);
six.setText("-");
seven = (Button) findViewById(R.id.box7);
seven.setText("-");
eight = (Button) findViewById(R.id.box8);
eight.setText("-");
nine = (Button) findViewById(R.id.box9);
nine.setText("-");
scoreX = 0;
scoreY = 0;
tie = 0;
winner = (TextView) findViewById(R.id.win);
clearBoard = (Button) findViewById(R.id.newgame);
clearBoard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
one.setText("-");
one.setEnabled(true);
two.setText("-");
two.setEnabled(true);
three.setText("-");
three.setEnabled(true);
four.setText("-");
four.setEnabled(true);
five.setText("-");
five.setEnabled(true);
six.setText("-");
six.setEnabled(true);
seven.setText("-");
seven.setEnabled(true);
eight.setText("-");
eight.setEnabled(true);
nine.setText("-");
nine.setEnabled(true);
}
});
}
public void game(View view) {
Button b = (Button) view;
moves(b);
}
public void moves(Button b){
if(turn == false){
b.setText("X");
b.setTextSize(15);
} else {
b.setText("O");
b.setTextSize(15);
}
//once X or O is placed, cannot reuse that button till new game
b.setEnabled(false);
b.setTextSize(15);
turn = !turn;
check();
//if there is a winner, make it so buttons can't be pressed and new game must start
if(check() == true){
one.setEnabled(false);
two.setEnabled(false);
three.setEnabled(false);
four.setEnabled(false);
five.setEnabled(false);
six.setEnabled(false);
seven.setEnabled(false);
eight.setEnabled(false);
nine.setEnabled(false);
}
}
public boolean check() {
boolean finished = true;
int player = 1; //1 is player X, 0 is player O, 2 is a tie
//horizontal check
if((!one.getText().equals("-")) && one.getText().toString().equals(two.getText().toString()) && two.getText().toString().equals(three.getText().toString())) {
if (one.getText().equals("O")) {
player = 0;
}
} else if((!four.getText().equals("-")) && four.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(six.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if((!seven.getText().equals("-")) && seven.getText().toString().equals(eight.getText().toString()) && eight.getText().toString().equals(nine.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if((!one.getText().equals("-")) && one.getText().toString().equals(four.getText().toString()) && four.getText().toString().equals(seven.getText().toString())){
//vertical check
if (one.getText().equals("O")) {
player = 0;
}
} else if((!two.getText().equals("-")) && two.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(eight.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if((!three.getText().equals("-")) && three.getText().toString().equals(six.getText().toString()) && six.getText().toString().equals(nine.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if((!one.getText().equals("-")) && one.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(nine.getText().toString())){
//diagonal check
if (one.getText().equals("O")) {
player = 0;
}
} else if((!three.getText().equals("-")) && three.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(seven.getText().toString())){
if (one.getText().equals("O")) {
player = 0;
}
} else if ((!one.getText().equals("-")) && (!two.getText().equals("-")) && (!three.getText().equals("-")) && (!four.getText().equals("-")) && (!five.getText().equals("-"))
&& (!six.getText().equals("-")) && (!seven.getText().equals("-")) && (!eight.getText().equals("-")) && (!nine.getText().equals("-"))){
player = 2;
} else {
return finished = false;
}
if(player == 1){
scoreX = scoreX + 1;
winner.setText(String.format("Player X is the winner!\nGames won by player X: %d\nGames won by player O: %d\nNumber of ties: %d", scoreX, scoreY, tie));
} else if (player == 0){
scoreY = scoreY + 1;
winner.setText(String.format("Player O is the winner!\nGames won by player X: %d\nGames won by player O: %d\nNumber of ties: %d", scoreX, scoreY, tie));
} else if(player == 2){
tie= tie + 1;
winner.setText(String.format("It's a tie!\nGames won by player X: %d\nGames won by player O: %d\nNumber of ties: %d", scoreX, scoreY, tie));
}
return finished;
}
}
我的变量 scoreX、scoreY 和 tie 都是成员变量并设置为 0。我一定是遗漏了一些东西,因为我看不到我的变量是如何递增 2 而不是 1 的。请帮忙!
编辑:我知道编码不太好。我还是个初学者。我添加了我所有的代码。我特别知道我的 check() 方法很长,但我不确定如何缩短它的长度,因为我正在检查游戏板上的按钮。
发生这种情况是因为您调用了两次检查函数: 我真的不能给你行号,但这是它发生的地方(在 moves 函数中):
check();
//if there is a winner, make it so buttons can't be pressed and new game must start
if(check() == true){
您应该做的是保存第一次检查调用的结果,然后使用它:
boolean result = check();
//if there is a winner, make it so buttons can't be pressed and new game must start
if(result == true){