调用set方法

时间:2015-12-17 00:19:32

标签: java arrays position elements

我正在进行棋盘游戏,我必须根据掷出的dieRoll int让棋盘上的玩家位置发生变化。但每次玩家掷骰子时,棋盘上的位置都不会改变。从一些故障排除来看,实际玩家X和Y位置似乎没有变化,而不是电路板显示不正确。

我的骰子滚动并移动玩家方法

public void rollDiceAndMovePlayer(){
    setDice();
    throwField.setText(String.valueOf(getDice()));
    //player1.setPosX(2) to test PosX change, doesn't work.
    player1.setPosX(2);
    if(player1.getPosY() == BOARD_SIZE - 1){
        if(player1.getPosX() < BOARD_SIZE - 1 ){
            player1.setPosX(player1.getPosX()+getDice());
        } else {
            //only accepting winning roll
            if(player1.getPosX() + getDice() == BOARD_SIZE - 1){
                //CHANGE TO JOPTIONPANE ##################################
                System.out.println("You win!");
            }
        }
    }
    else if(player1.getPosX()+getDice() > BOARD_SIZE -1){
        player1.setPosY(player1.getPosY()+1);
        player1.setPosY(player1.getPosY()+getDice() - BOARD_SIZE);
    }
    else{
        player1.setPosX(player1.getPosX()+getDice());
    }
    display();

我的播放器Element类有两个静态变量

private int playerPosX = 0;
private int playerPosY = 0;

X和Y的set和get方法:

public void setPosX(int a){
    int playerPosX = a;
}
public int getPosX(){
    return playerPosX;
}

我已经确保电路板的显示方法确实会删除旧电路板并重新打印。我在rollDiceAndMovePlayer方法中玩了一个JOptionPane来测试dieRoll和玩家X和Ys,看起来X和Ys保持在0.我甚至让我的教授查看我的代码,他也找不到问题。我倾向于认为它与setPosX / Y方法存在问题,但无法弄明白。

如果有人知道这个问题是什么,我非常感激。

1 个答案:

答案 0 :(得分:0)

您设置的是局部变量的值,而不是您应该的值。您应该设置的是类变量,即实例变量。局部变量只对函数中的代码可见,而不是其他地方。一旦该函数完成,本地的值就会丢失。这是实例变量和局部变量之间的区别。

public void setPosX(int a){
    //int playerPosX = a;   incorrect
    this.playerPosX = a;    correct
}