вычитая из двойного - PullRequest
       21

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

1 голос
/ 08 декабря 2011

Я использую этот код, чтобы увидеть, делится ли оценка пользователей на 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 в модуле, который обновляется каждую секунду.

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

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

Есть предложения?

Ответы [ 3 ]

3 голосов
/ 08 декабря 2011

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

bool alreadySet = false;

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

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

Я понимаю, что вы имеете в виду - это действительно похоже нанемного грязное решение.

2 голосов
/ 09 декабря 2011

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

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

0 голосов
/ 08 декабря 2011

Вы можете использовать флаг, чтобы проверить, делилось ли 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) {
      ...
   }
   ...
}
...