Вычитание из двойного

Я использую этот код, чтобы увидеть, делится ли оценка пользователей на 20.

if(hitCount % 20 == 0){
    interval = interval - 1; 
    Log.e("Score", "User score is divisible by 20 decreasing interval to " 
                   + interval);

    timer.setInterval(interval);
}

Единственная проблема заключается в том, что этот код находится в методе IUpdate в andengine, который обновляется каждую секунду.

Таким образом, если оценка пользователя делится на 20 в течение более 1 секунды, она продолжает вычитать 1.

Я только хочу вычесть один раз, если оценка пользователя делится на 20.

Какие-либо предложения?

3 ответа

Решение

Вы можете сохранить внешний флаг:

bool alreadySet = false;

Затем в вашем коде установите или удалите его:

if(hitCount % 20 == 0) {
    if(!alreadySet) {
        alreadySet = true;
        // Continue with your code
    }
} else {
    alreadySet = false;
}

Хотя я понимаю, что вы имеете в виду - это выглядит как грязное решение.

Я знаю, что есть выбранный ответ, но:

Вместо того, чтобы проверять, делится ли оценка на 20 в ветке обновления, почему бы вам не проверить ее при обновлении оценки? Это уменьшит количество проверок на "% 20" (повышение эффективности), а также решит вашу проблему.

Вы можете использовать флаг, чтобы проверить, hitCount уже делится на 20

boolean bDivBy20 = false; // outside of the method
...
if(!bDivBy20 && hitCount % 20 == 0){
   bDivBy20 = true;
   interval = interval - 1; 
   Log.e("Score", "User score is divisible by 20 decreasing interval to " + interval);

   timer.setInterval(interval);
}

Кроме того, если вы хотите ввести if заблокировать, но выполнить только строку interval = interval - 1; один раз, затем переместите чек внутрь внешнего if блок, например:

if(hitCount % 20 == 0){
   ...
   if (!bDivBy20) {
      ...
   }
   ...
}
Другие вопросы по тегам