在Java中设置来自另一个类的变量值
我想知道是否可以从另一个类重置变量的值。例如,我在HillClimber(hc)类中有一个变量: 我想做的是运行一个模拟游戏,让球的权重处于这个值。当它完成时,我想从另一个类将值设置为201并再次开始模拟,然后增加到202并开始另一个,以此类推。我的问题是,每次我重新启动模拟时,ballWeight变量都会重置为200。我已尝试在HillClimber类中使用setter方法:在Java中设置来自另一个类的变量值,java,variables,setter,Java,Variables,Setter,我想知道是否可以从另一个类重置变量的值。例如,我在HillClimber(hc)类中有一个变量: 我想做的是运行一个模拟游戏,让球的权重处于这个值。当它完成时,我想从另一个类将值设置为201并再次开始模拟,然后增加到202并开始另一个,以此类推。我的问题是,每次我重新启动模拟时,ballWeight变量都会重置为200。我已尝试在HillClimber类中使用setter方法: public int setBallWeight(int ballWeight) { retu
public int setBallWeight(int ballWeight) {
return this.ballWeight = ballWeight;
}
并在模拟结束时从另一个类调用它:
hc.setBallWeight(hc.ballWeight+1);
但这似乎不起作用,因为变量的存储值没有改变。有人知道我如何做到这一点,以便每次模拟结束时,球重的存储值都会增加1吗?或者这可能吗?谢谢。通常情况下,对于对象的每个变量,都有所谓的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
中那样直接访问它,这是可能的,但这是一种不好的做法,并阻止这种访问类型将变量声明为private(这意味着只有声明它的类才能直接访问它)
为了满足您在游戏每次运行时添加一个的请求,您可以调用
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)
.
.
.
}
}
编辑 我认为你的问题远不止这些。您要求在不使用永久存储器的情况下保存变量的状态(这意味着,如果您关闭电脑并在电脑上使用,该值也应可用)。这是根本无法实现的 您应该重新思考您的程序(我指的是java程序,而不是“游戏运行”),不要在每次游戏运行后停止。您可以通过不同的方式执行此操作:via、via用户输入from
stdin
等等。如果您想在这个主题上获得一些帮助,我们需要了解更多您的代码(也许把整个代码放在上面是最好的)
或者您可以使用一个文件来存储您的值。()。这是很有可能的,而且你所描述的方式会起作用;你是否有可能扔掉这个对象并创建一个新实例?没有,我想我只是想覆盖这个变量,我该如何扔掉它并创建一个新的?变量在哪里?它是在一个静态类中还是在一个创建对象的类中?检查写入变量“hc”的行。也许在每个日志语句之前放置一个log语句,或者在调试器中设置一个中断行。我的直觉是,你们有多个物体的实例,其中有可变的重量。另一个选项是在对象构造函数中放置日志行。否则,您将不止一次地调用setter。。在那里也可以尝试一个日志行。它是在一个公共类中,在那里它被初始化为200Nice答案!您可能需要进一步扩展
静态变量。例如,HillClimber
类中的static
变量可以计算实例化了多少个HillClimber
s。或者你可以保留一些与所有HillClimber
s相关的其他数据,而不是任何HillClimber
。感谢你的回答,我在那里尝试过,但每次游戏结束后变量仍会重置为200。是否有一种方法可以更改硬编码的值,而不必每次将该值读写到文件/数据库?如果您的意思是,如果有一种方法可以在运行时外部存储变量的运行时可变值,并且没有永久存储,那么答案是否。问题没有任何意义,因为您希望存储变量而不存储信息技术每次运行java程序并在对象中设置变量时,当java程序结束时,这些变量将被清除。是的,我想知道JVM是否有办法在每次游戏后更改硬编码变量,但我认为这是不可能的,谢谢你的帮助。我确实尝试了文件方法,但为了快速捕获统计数据,我正在加快游戏速度。当使用文件选项时,由于某些原因,游戏速度无法加快,再次感谢你的建议。
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)
.
.
.
}
}