-2

私は小さなジャバゲームを作っています、そして私は二重の名前のバッテリーを使わなければなりません。定期的に減少し、時には増加します。これが私の方法です:

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を実行します。それが役立つ場合、このメソッドは1秒間に約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

結果は、メソッドを作成した方法で、ロジックのようです。バッテリーの 1 つのインスタンスで作業していないようです。for-each ループの使用を開始します。

よく見ると、次のようになります。

  • バッテリーの最初のインスタンスを取得しますelementsTableau

  • 値を出力します: 82.0

  • あなたが減少し、それが機能し、あなたが持っている値を出力します: 81.0

  • 値を増やしますが、何も印刷しないため、機能するかどうかはわかりません

  • それは for-each ループの終わりなので、次の要素を取得しますelementsTableau

  • おそらく、バッテリーの別の (異なる) インスタンスを取得し、その値は : 92.0 です。

したがって、コードの残りの部分は提供しませんが、配列にバッテリー インスタンスが 1 つしかないことを確認し (配列を使用する意味がある場合は...)、常にバッテリーのこのインスタンスで作業するようにしてください。 .

于 2012-06-02T09:22:44.733 に答える