在Java中设置另一个类的变量值

时间:2014-06-26 15:02:11

标签: java variables setter

我想知道是否可以从另一个类重置变量的值。例如,我在HillClimber(hc)类中有这个变量:

    public int ballWeight = 200;

我想要做的是运行一个模拟游戏,球的权重为此值。当它完成时我想从另一个类将值设置为201并再次开始模拟,然后再增加到202并开始另一个等等。我的问题是,每次重新启动模拟时,ballWeight变量都会重置为200.我尝试在HillClimber类中使用setter方法:

    public int setBallWeight(int ballWeight) {
        return this.ballWeight = ballWeight;
    }

并在模拟结束时从另一个类调用它:

    hc.setBallWeight(hc.ballWeight+1);

但这似乎不起作用,因为变量存储值没有改变。有谁知道如何做到这一点所以每次模拟结束时ballWeight的存储值会增加1?或者这甚至可能吗?感谢。

1 个答案:

答案 0 :(得分:2)

通常在POJO中,您拥有对象的每个变量所谓的getter和setter方法。在你的情况下:

public class HillClimber{
    private int ballWeight;

    public HillClimber(){
        this.ballWeight = 200;
    }

    public void setBallWeight(int ballWeight){
        this.ballWeight = ballWeight;
    }

    public int getBallWeight(){
        return this.ballWeight;
    }
}

通过这种方式,您可以通过get和set方法访问变量ballWeight。你不能像hc.ballWeight那样直接访问它,这是可能的,但这是一种不好的做法,并阻止这种访问类型将你的变量声明为私有(意味着只有声明它的类才可以直接访问它)。

为了满足您在每次游戏中添加一个的请求,您可以调用

hc.setBallWeight(++hc.getBallWeight()); //Equivalent to hc.setBallWeight(hc.getBallWeight() + 1);

如果没有自动生成类(如在Hibernate上下文中),我通常不会使用此方法,而是在HillClimber类中声明另一个方法

public void incrementBallWeight(int ballWeightToAdd){
    this.ballWeight += ballweiGhtToAdd; //Equivalent to this.ballWeight = this.ballWeight + ballweiGhtToAdd;
}

或者如果我总是只需要在我的变量

中添加一个
public void incrementBallWeight(){
    this.ballWeight++;
}

然后在每次游戏运行后简单地调用incrementBallWeight

NB:要使其正常工作,您必须始终使用HillClimber的相同实例。在你的主要

public class Game{
    private HillClimber hc = new HillClimber(); //Create the instance and sets ballWeight to 200
    public static void main(String[] args){
         playGame();
         hc.incrementBallWeight(); //ballWeight == 201

         playAnotherGame()
         hc.incrementBallWeight(); //ballWeight == 202 -> Always the same instance of HillClimber (hc)
         .
         .
         . 

    }
}

修改

我认为你的问题不止于此。您要求在不使用永久存储的情况下保存变量的状态(意味着如果您关闭并在PC上也可以使用此值)。这根本无法实现。

你应该重新考虑你的程序(我指的是java程序,而不是游戏运行")在每次游戏运行后都不会停止。您可以通过不同方式执行此操作:通过Swing GUI,通过stdin的用户输入等等。如果您需要关于此主题的一些帮助,我们需要了解更多您的代码(可能最好将整个代码放在一起)。

或者您可以使用文件来存储您的值is not as difficult as you think。 (Also)。