2012-06-02 66 views
-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 

我不明白爲什麼BATTERIE下降,然後收回其原值,而有使用這個變量而沒有其他的方法。 感謝您的幫助

編輯:這裏是diminuerBatterie()augmenterBatterie()方法:

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

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

顯示增加或減少「batterie」方法的代碼 –

+0

你有多線程嗎? – SJuan76

+0

@ SJuan76是的,我使用多線程,但我不認爲這可能是我的問題的原因,因爲只有一個線程使用batterie變量(但我可能是錯的)。 – pp0893

回答

1

結果似乎是邏輯,跟你做你的方法方式。看起來你並沒有在batterie的一個實例上工作,你開始使用for-each循環。

因此,如果我們仔細看:

  • 你得到電池的第一個實例中elementsTableau

  • 您打印出值:82.0

  • 你減少

    ,它的工作原理,那麼你打印你的價值:81.0

  • 你增加了價值,但我們不知道它是否工作澳洲英語你不顯示任何信息

  • 那麼它的for-each循環,所以你在elementsTableau

  • 獲得下一個元素,你可能得到電池的其他(不同)的情況下結束,它的價值是:92.0

所以你不提供你的代碼的其餘部分,但你應該確保你只有一個BATTERIE實例陣列中(如果它仍然是有意義的使用數組...),並確認你總是在這個batterie的實例上工作。

+0

我完全同意這個答案。 – Denzil

+0

我之前應該說過,但在元素Tableau中只有一個Spire實例(因此只有一個batterie實例),所以我相信沒有其他batterie。 – pp0893

+0

@ pp0893所以當你進入'agirBatterie'時,你只會在前面打印一次'...'和'後面的......'?你可以確認嗎?如果這是真的,那麼問題可能是你創建/填充'elementsTableau'的方式。再次確定你總是使用'batterie'的同一個實例。如果您沒有發現自己,請嘗試發佈代碼的相關部分以獲得正確幫助。 –