Switch语句功能不正常

时间:2014-12-14 22:41:23

标签: android onclick

此处的目标是检测何时单击某个视图(通过单击的特定按钮标识的ID名称),然后在另一个类的实例中触发操作。

我并非100%确定它正确阅读。我将发布代码,然后解释问题。

在主要活动中:

@Override
public void onClick(View v) {

    //Set starting player to 1 or 0
        if( mGame.getPlayerCounter() == 0 ) {
            mGame.determineStartingPlayer();
        }

        //Fills buttons on mGame instance 
        fillButtonSpaces(v);
        ....

//Check if the board has to be reset for either a tie or a win 
        if(mGame.checkGameTie() || mGame.checkGameWinner()) { 
            //Resets java mGame board logic 
            mGame.resetGameBoard();

             //Reset the physical GUI gameboard 
            resetPhysicalGameBoard();
        }}

public void fillButtonSpaces(View v) {
     switch(v.getId()){
       case R.id.imageButtonOne :
              mGame.fillSquareZero();
       case R.id.imageButtonTwo :
              mGame.fillSquareOne();
       case R.id.imageButtonThree :
              mGame.fillSquareTwo();
       case R.id.imageButtonFour :
              mGame.fillSquareThree();
       case R.id.imageButtonFive :
              mGame.fillSquareFour();
       case R.id.imageButtonSix :
              mGame.fillSquareFive();
       case R.id.imageButtonSeven :
              mGame.fillSquareSix();
       case R.id.imageButtonEight :
              mGame.fillSquareSeven();
       case R.id.imageButtonNine :
              mGame.fillSquareEight();
     }
}

然后在另一个班级:

public void fillSquareZero() {
    if( getCurrentPlayer() == 0) {
        spaceZero = 0; } else {
            spaceZero = 1;
        }
}

public void fillSquareOne() {
    if( getCurrentPlayer() == 0) {
        spaceOne = 0; } else {
            spaceOne = 1;
        }
}

public void fillSquareTwo() {
    if( getCurrentPlayer() == 0) {
        spaceTwo = 0; } else {
            spaceTwo = 1;
        }
}
.... etc.....

应该调用这些方法将游戏板的值设置为1或0.然后我想检查这个方法(在每个onclick上调用以查看是否有赢家)

public boolean checkGameWinner() {
    //Player 1 (Human) player winning rules
    if (spaceZero == 0 && spaceOne == 0 && spaceTwo == 0) {
        return true;
        }

因此,根据单击的按钮(在开关案例中计算),mGame实例将spaceZero - spaceEight变量设置为第二个类中的1或0。所以我要检查前3个是否设置为0(玩家1选择了它们)。当我这样做时,我没有得到理想的结果,每当我击中第一个单元格时,如果将玩家1位图放在那里,则该板是清除的...这里发生了什么?

2 个答案:

答案 0 :(得分:3)

您的开关案例在每个案例后都缺少break;。它应该是

 switch(v.getId()){
       case R.id.imageButtonOne :
              mGame.fillSquareZero();
              break;
       case R.id.imageButtonTwo :
              mGame.fillSquareOne();
              break;
       case R.id.imageButtonThree :
              mGame.fillSquareTwo();
              break;

等...

答案 1 :(得分:1)

我认为你错过了每个“case”子句末尾的“break”语句。

这样,如果单击R.id.imageButtonOne,代码mGame.fillSquareZero();将被执行,但其他情况也会执行。

有关switch语句的更多信息:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html