2016-01-04 3 views
-4
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 раз, а затем завершает работу программы. Теперь это:Почему этот код работает с оператором if, но не во время цикла?

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 раз подряд, а затем завершается. Почему это?

+0

Возможный дубликат [Java: Recursion -While Loop Vs If Loop] (http://stackoverflow.com/questions/11840294/java-recursion-while-loop-vs-if-loop) – ericbn

+2

Ваш первый пример требует, чтобы 'timerCallback()' вызывается для * каждого * вывода «Мой таймер проснулся!», тогда как ваш второй пример делает все это внутри цикла внутри * one * вызова 'timerCallback()'. 'while' будет продолжать повторять выполнение следующего оператора или блока до тех пор, пока условие не будет выполнено. 'if' только выполняет блок один раз, если условие истинно. – lurker

+0

Вам нужно знать разницу между 'if' и' while' ... – ericbn

ответ

0

Назначение if/else в исходной версии - предоставить таймеру восемь шансов «проснуться» и включить состояние выключения перед вызовом stopMonitoring(). Печать сообщения является вторичной. Таким образом, if/else проверяет, был ли вызов раз. Если это не так, хорошо, распечатайте сообщение и дайте ему еще один шанс.

Подставляя while, вы просто печатаете сообщение 8 раз, быстро переключаете состояние штифта назад и вперед, не проверяя, помогает ли оно, а затем опускаются на stopMonitoring(). Таким образом, вы прекращаете мониторинг после первого звонка до timerCallback(), а не восьмого.

 Смежные вопросы

  • Нет связанных вопросов^_^