Я пишу боевой симулятор. Мой класс атакующего инициирует атаку, и мой класс защитника должен блокировать его. 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);
Спасибо !!! вместо редактирования строк, которые вы предложили, я отредактировал их в классе защитника: highRatio = (float) highAtkCounter/roundCounter; mediumRatio = (float) mediumAtkCounter/roundCounter; lowRatio = (float) lowAtkCounter/roundCounter; –
@KhalidJomha * "вместо редактирования строк, которые вы предложили, я отредактировал их в классе защитника" * Ваш код, ваш выбор ...; o) Но имейте в виду, что операции флотирования могут иметь ошибки оцифровки. Обычно это не имеет большого значения в играх жестких ... –
Что такое ошибка оцифровки? –