Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中设置来自另一个类的变量值_Java_Variables_Setter - Fatal编程技术网

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

在Java中设置来自另一个类的变量值,java,variables,setter,Java,Variables,Setter,我想知道是否可以从另一个类重置变量的值。例如,我在HillClimber(hc)类中有一个变量: 我想做的是运行一个模拟游戏,让球的权重处于这个值。当它完成时,我想从另一个类将值设置为201并再次开始模拟,然后增加到202并开始另一个,以此类推。我的问题是,每次我重新启动模拟时,ballWeight变量都会重置为200。我已尝试在HillClimber类中使用setter方法: public int setBallWeight(int ballWeight) { retu

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

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

    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)
         .
         .
         . 

    }
}