Почему этот код работает с оператором if, а не с циклом while?
public void timerCallback()
{
if (count < 8)
{
System.out.println("My timer woke up!");
this.setOutputState(this.pinNumber, this.pinState);
this.pinState = !this.pinState;
this.setTimer(this.timerDelay);
count++;
}else
{
this.stopMonitoring();
}
}
Это работает в том смысле, что оно печатает оператор (с задержкой) 8 раз, а затем завершает программу. Теперь это:
public void timerCallback()
{
while (count < 8)
{
System.out.println("My timer woke up!");
this.setOutputState(this.pinNumber, this.pinState);
this.pinState = !this.pinState;
this.setTimer(this.timerDelay);
count++;
}
this.stopMonitoring();
}
Этот код просто печатает оператор 8 раз за раз, а затем завершается. Это почему?
1 ответ
Цель if/else
в оригинальной версии это дает таймеру восемь шансов "проснуться" и переключить состояние булавки перед вызовом stopMonitoring()
, Печать сообщения является вторичной. Итак if/else
проверяет, если timerCallback()
был вызван 8 раз. Если нет, распечатайте сообщение и дайте ему еще один шанс.
Подставляя while
вы просто в конечном итоге печатаете сообщение 8 раз, быстро переключаете состояние булавки назад и вперед, не проверяя, помогает ли это, а затем опускаетесь в stopMonitoring()
, Таким образом, вы прекращаете мониторинг после первого звонка timerCallback()
не восьмой.