我想知道是否可以从另一个类重置变量的值。例如,我在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?或者这甚至可能吗?感谢。
答案 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)。