Почему этот код работает с оператором 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()не восьмой.

Другие вопросы по тегам