我有一個使用while循環的問題。讓我解釋。我必須管理帶有紅外傳感器的燈。沒問題。 它以這種方式工作:如果發現移動,燈亮起,如果沒有移動被發現,超時將開始,並在此之後,光線下降,但如果在這個超時在一個新的移動注意到,超時必須停止,「重置」週期。
由於沒有「但」條件下,它會很容易有Tread.sleep來管理,但我想用一段時間週期沒有結果來完成它......
這是我有,每秒一次檢查一個無限循環,他傳感器狀態
while (true) {
try {
if (sensore.getStatoSensore() == 1) { //movement noticed
lampada.accendi(); //light on
} else if (sensore.getStatoSensore() == 0) { //no movement noticed
long start = System.currentTimeMillis();
long end = start + (timeoutSpegnimento * 1000); //10 seconds before lights shut down
boolean movement = false;
while (System.currentTimeMillis() < end) {
logger.debug("Shutdown timer started");
if (sensore.getStatoSensore() == 1) {
movement = true;
lampada.accendi(); //light up
logger.debug("Movement noticed - movement=" + movement);
} else {
movement = false;
}
Thread.sleep(500);
}
if (!movement) {
lampada.spegni(); //light off
}
}
} catch (Throwable e1) {
// TODO Auto-generated catch block
logger.error(e1);
}
try {
Thread.sleep(intervallo * 1000); //do the sensor check once a second
} catch (InterruptedException e) {
// TODO Auto-generated catch block
logger.error(e);
}
}
,我發現了問題與超時環while (System.currentTimeMillis() < end)
在我的想法,它應該以這種方式工作: 如果(sensore.getStatoSensore() == 0)
一段時間週期超時叫做。在此期間,如果沒有發現新動作,則movement
爲假,因此調用lampada.spegni();
。這部分運作良好。
但這如果條件
if (sensore.getStatoSensore() == 1) {
movement = true;
lampada.accendi(); //light up
logger.debug("Movement noticed - movement=" + movement);
作品僅在第一次while循環中,不是也徹最初一段時間(true)循環被搞砸了,一句話,我不能得到正常的行爲了。我希望這更好的解釋什麼,我正在尋找
作品「以一種奇怪的方式」..以什麼奇怪的方式?發生了什麼/出錯?你能指望什麼?你得到了什麼? – Stultuske
我沒有在任何地方看到break語句。我猜猜,while(true)變成了一個無限循環嗎? – Stultuske
while(true)循環必須是無限循環,它會連續檢查傳感器值。我的問題是在內部循環(System.currentTimeMillis()
besmart