2017-02-06 2 views
0

私は戦闘シミュレータを書いています。私の攻撃者クラスは攻撃を開始し、ディフェンダークラスはそれをブロックすることになっています。マネージャは結果を計算してプリントする私のメインクラスです。私の問題は、私のhighRatio、mediumRatio、lowRatio変数です。それらが1に等しくない場合、それらのすべてがゼロに設定される。何が起こっている可能性についての任意のアイデア?論理エラー?潜水2 intそれは浮動小数点になります

//ディフェンダークラス

public int defenseSelector(int highAtkCounter, int mediumAtkCounter, int lowAtkCounter, int rounds, int roundCounter) 
{ 
    Random defenseTypeGenerator; 
    int defense = 0; 
    float highRatio; 
    float mediumRatio; 
    float lowRatio; 

    defenseTypeGenerator = new Random(); 
    int defenseType = defenseTypeGenerator.nextInt(MAX_ROUNDS) + 1; 

    highRatio = highAtkCounter/roundCounter; 
    mediumRatio = mediumAtkCounter/roundCounter; 
    lowRatio = lowAtkCounter/roundCounter; 



    if(roundCounter > 3 && roundCounter <= rounds) //AI portion 
    { 
     if (highRatio > mediumRatio && highRatio > lowRatio) 
     { 
      defense = HIGH; 
     } 

     else if (mediumRatio > highRatio && mediumRatio > lowRatio) 
     { 
      defense = MEDIUM; 
     } 

     else if (lowRatio > highRatio && lowRatio > mediumRatio) 
     { 
      defense = LOW; 
     } 

     else 
     { 
      System.out.println("AI ERROR ratios " + highRatio + " " + mediumRatio + " " + lowRatio); 
      System.out.println("AI ERROR atkCounters " + highAtkCounter + " " + mediumAtkCounter + " " + lowAtkCounter); 
      System.out.println("AI ERROR rCounters " + roundCounter); 

//マネージャクラス整数の整数結果とJavaで

while(roundCounter <= rounds) 
    { 
     int attack = theAttacker.attackSelector(high, medium, low); 

     int highAtkTracker = theAttacker.countHighAtks(attack); 
     System.out.println("DEBUG " + attack); 
     System.out.println("DEBUG " + highAtkTracker); 
     int mediumAtkTracker = theAttacker.countMediumAtks(attack); 
     System.out.println("DEBUG " + attack); 
     System.out.println("DEBUG " + mediumAtkTracker); 
     int lowAtkTracker = theAttacker.countLowAtks(attack); 
     System.out.println("DEBUG " + attack); 
     System.out.println("DEBUG " + lowAtkTracker); 

     highAtkCounter = highAtkCounter + highAtkTracker; 
     mediumAtkCounter = mediumAtkCounter + mediumAtkTracker; 
     lowAtkCounter = lowAtkCounter + lowAtkTracker; 


     int defense = theDefender.defenseSelector(highAtkCounter, mediumAtkCounter, lowAtkCounter, rounds, roundCounter); 

答えて

0

任意演算。

そのため、明示的に浮動小数点型に整数にキャストする必要があります。

highAtkCounter = highAtkCounter + (float)highAtkTracker; 
    mediumAtkCounter = mediumAtkCounter + (float)mediumAtkTracker; 
    lowAtkCounter = lowAtkCounter + (float)lowAtkTracker; 
+0

ありがとうございました!!!あなたが提案した行を編集する代わりに、私はdefenderクラスのものを編集しました。 highRatio =(float)highAtkCounter/roundCounter; mediumRatio =(float)mediumAtkCounter/roundCounter; lowRatio =(float)lowAtkCounter/roundCounter; –

+0

@KhalidJomha * "あなたが提案した行を編集するのではなく、防衛士のクラスで編集した行を編集する代わりに" *あなたのコード、あなたの選択...; o)しかし、浮動小数点演算にはデジタル化エラーがあるかもしれません。通常これはゲームの厳しいものではありません... –

+0

デジタル化エラーとは何ですか? –

関連する問題