2017-02-06 26 views
0

Я пишу боевой симулятор. Мой класс атакующего инициирует атаку, и мой класс защитника должен блокировать его. manager - мой основной класс, который вычисляет и печатает результаты. Моя проблема связана с моими переменными highRatio, mediumRatio и lowRatio. Если они не равны 1, все они равны нулю. Любые идеи относительно того, что может быть?логическая ошибка? diving 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); 

// менеджер Класс

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

В Java любая арифметическая операция с целым числом результатов в виде целого числа.

Поэтому вы должны отбросить целое число в тип с плавающей точкой в ​​явном виде:

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

Спасибо !!! вместо редактирования строк, которые вы предложили, я отредактировал их в классе защитника: highRatio = (float) highAtkCounter/roundCounter; mediumRatio = (float) mediumAtkCounter/roundCounter; lowRatio = (float) lowAtkCounter/roundCounter; –

+0

@KhalidJomha * "вместо редактирования строк, которые вы предложили, я отредактировал их в классе защитника" * Ваш код, ваш выбор ...; o) Но имейте в виду, что операции флотирования могут иметь ошибки оцифровки. Обычно это не имеет большого значения в играх жестких ... –

+0

Что такое ошибка оцифровки? –