-2

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

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--;
    }
}
4

1 回答 1

1

结果似乎是合乎逻辑的,以您制作方法的方式。似乎您没有在电池的一个实例上工作,您开始使用 for-each 循环。

因此,如果我们仔细观察:

  • 你得到了第一个电池实例elementsTableau

  • 你打印值:82.0

  • 你减少,它工作然后你打印你拥有的价值:81.0

  • 您增加了价值,但我们看不到它是否有效,因为您不打印任何东西

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

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

因此,您无需提供其余代码,但应确保阵列中只有一个电池实例(如果使用阵列仍然有意义的话......)并确保您始终使用此电池实例.

于 2012-06-02T09:22:44.733 回答