对变量消失的变化

时间:2012-06-02 09:00:10

标签: java variables

我正在制作一个小游戏,我必须使用双命名电池。 它会定期减少,有时会增加。这是我的方法:

public void agirBatterie() {
    for(Element e:elementsTableau){
        if(e instanceof Spire){
          System.out.println("before : "+((Spire)e).getBatterie());
          ((Spire)e).diminuerBatterie();
          System.out.println("after: "+((Spire)e).getBatterie());
          if(((Spire)e).isAugmentationBatterie()){
            ((Spire)e).augmenterBatterie();
          }
        }
  }
  i =0;
}

diminuerBatterie方法执行batterie - - ,而augmenterBatterie方法执行batterie = batterie +10。如果它可以提供帮助,则此方法每秒调用约6次。 当我执行它时,我得到这样的东西:

before: 82.0
after : 81.0
before : 92.0
after : 91.0
before : 81.0
after : 80.0

我不明白为什么电池减少了,然后收回旧值,而没有其他方法使用这个变量。 谢谢你的帮助

编辑:以下是diminuerBatterie()augmenterBatterie()方法:

public void augmenterBatterie() {
    batterie = batterie+10;
    augmentationBatterie = false;
}

public void diminuerBatterie() {
    if(batterie>0){
        batterie--;
    }
}

1 个答案:

答案 0 :(得分:1)

结果似乎是逻辑,与你的方法一样。看起来你不能在一个batterie实例上工作,你开始使用for-each循环。

所以,如果我们仔细观察:

  • 您在elementsTableau

  • 中获得了第一个电池实例
  • 您打印的值:82.0

  • 你减少了,它可以打印你拥有的值:81.0

  • 你增加了价值,但我们不知道它是否有效,因为你没有打印任何东西

  • 然后它就是for-each循环的结束,所以你得到elementsTableau中的下一个元素

  • 你可能得到另一个(不同的)电池实例,其价值是:92.0

所以你不提供剩下的代码,但你应该确保你的数组中只有一个batterie实例(如果使用数组仍然有意义......)并确保你总是在这个实例上工作的电池。