我正在制作一个小游戏,我必须使用双命名电池。 它会定期减少,有时会增加。这是我的方法:
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--;
}
}
答案 0 :(得分:1)
结果似乎是逻辑,与你的方法一样。看起来你不能在一个batterie实例上工作,你开始使用for-each循环。
所以,如果我们仔细观察:
您在elementsTableau
您打印的值:82.0
你减少了,它可以打印你拥有的值:81.0
你增加了价值,但我们不知道它是否有效,因为你没有打印任何东西
然后它就是for-each循环的结束,所以你得到elementsTableau
中的下一个元素
你可能得到另一个(不同的)电池实例,其价值是:92.0
所以你不提供剩下的代码,但你应该确保你的数组中只有一个batterie实例(如果使用数组仍然有意义......)并确保你总是在这个实例上工作的电池。