爲什麼有些人在他們的代碼中使用while(true){}
塊?它是如何工作的?使用「while(true){...}」是什麼意思?
回答
這是一個無限循環。在每次迭代中,條件將被評估。由於條件是true
,總是......真的......循環將永遠運行。退出循環是通過檢查循環內部的東西來完成的,然後在必要時打破。
通過在循環內部放置break檢查,而不是將其用作條件,這可以讓您更清楚地知道,您期待這種檢查在發生某些事件之前運行。
這是一個常見的場景,在遊戲中;你希望繼續處理動作和渲染幀,直到遊戲結束。
哦,真的,我猜是的!謝謝。 – trusktr 2010-10-16 00:31:19
while(條件){做函數} 當條件爲真..它會做的功能。
所以while(true) 條件總是爲真 它會繼續循環。
編碼將永遠不會進行。
編碼可能會繼續,但不退出循環(比如使用'break'),處理將永遠不會在循環之外繼續。 – jcolebrand 2010-10-16 00:26:54
我的意思是..如果他不使用任何關鍵字來打破循環,它將繼續循環。 – william 2010-10-16 00:47:13
這只是一個永遠不會結束的循環,被稱爲infinite-loop。 (很多時候,這是一件壞事。)
當它是空的時候,它會無限期地停止程序*;否則通常有一個在環路一些條件,真當,打破循環:
while (true)
{
// ...
if (stopLoop)
break;
// ...
}
這往往比輔助標誌清潔:
bool run = true;
while (run)
{
// ...
if (stopLoop)
{
run = false;
continue; // jump to top
}
// ...
}
還要注意一些會建議for (;;)
相反,各種原因。 (也就是說,它可能會擺脫類似於「條件表達總是如此」的警告。)
*在大多數語言中。
這不是一個「停止」,而是「迅速轉換到位」。 – 2010-10-16 01:18:07
@Jeremy:很好。 :)除非我將「halt」定義爲「不會執行超出'while循環'範圍的語句」,否則我會按原樣離開我的帖子。 :P – GManNickG 2010-10-16 01:53:00
這是一個永久運行的循環,除非在身體內部有一個break
聲明。
不是東西在while
語句中的所有可能的條件下,
// Always tests all conditions in loop header:
while((condition1 && condition2) || condition3 || conditionN_etc) {
// logic...
if (notable_condition)
continue; // skip remainder, go direct to evaluation portion of loop
// more logic
// maybe more notable conditions use keyword: continue
}
有些程序員可能會認爲這是更好地把條件throughough邏輯,(即不循環頭球攻門稍稍內),並聘請break
聲明在適當的地方出去。這種方法通常會否定確定何時離開循環的原始條件(即,而不是何時保持循環)。
// Always tests all conditions in body of loop logic:
while(true) {
//logic...
if (!condition1 || !condition2)
break; // Break out for good.
// more logic...
if (!condition3)
break;
// even more logic ...
}
在現實生活中往往是一個更灰色混合物,所有這些東西的組合,而不是一個極化決定去這種或那種方式。
使用將取決於邏輯的複雜性和程序員的喜好..也許在此線程:)
的接受的答案也不要忘了do
.. while
。最終的解決方案可以使用該版本的while
構造來將條件邏輯扭曲成他們的喜好。
do {
//logic with possible conditional tests and break or continue
} while (true); /* or many conditional tests */
總之,作爲一名程序員可以有選擇。所以不要忘了感謝你的編譯器作者。
我更喜歡'do {...} while(false);';) – jcolebrand 2010-10-16 00:40:02
@drachenstern:很好。 – 2010-10-16 00:42:21
@John K〜Lol,我認爲是這樣;)...正在等待某人對我上面的加熱器評論發表評論:p ~~另外,看看誰試圖爭論那個會很有趣......會愛知道誰花了不止一遍來弄清楚代碼的功能。 – jcolebrand 2010-10-16 00:51:33
當Edsger W. Dijkstra年輕的時候,它等同於:
Do loop initialization
label a:
Do some code
If (Loop is stoppable and End condition is met) goto label b
/* nowadays replaced by some kind of break() */
Do some more code, probably incrementing counters
go to label a
label b:
Be happy and continue
Dijkstra後決定成爲Antigotoist和程序員相信成羣這樣做,一個信仰來了在地球和代碼感實性明顯。
所以
Do loop initialization
While (true){
some code
If (Loop is stoppable and End condition is met) break();
Do some more code, probably incrementing counters
}
Be happy and continue
取代了憎惡。
對此不滿意,狂熱分子超過了。一旦證明,遞歸是更好的,更清晰,更普遍的是循環,而變量只是一個魔鬼般的化身,函數式編程,作爲一個夢想,終於成真:
Nest[f[.],x, forever[May God help you break]]
因此,循環遞歸變得真的不可阻擋,或者至少是不可阻擋的。
真正的要點是,當(真){..}是當退出條件的語義沒有強烈的單一偏好,所以它對讀者說很好的方式,「好吧,實際上有休息條件A,B ,C ..,但條件的計算過於冗長,因此按照預期的出現概率順序將它們分別放入內部塊中。
- 1. while(true)條件的意義是什麼?
- 2. 這是什麼意思:data-component-bound =「true」?
- 3. Coq中'true = false'是什麼意思?
- 4. Python: - 什麼是「if(true)」的意思
- 5. 是什麼意思:是什麼意思?
- 6. while(i - > 0)是什麼意思?
- 7. 我是什麼:nil =「true」是什麼意思?
- 8. MeanMenu無法在IE中使用。 checkbycsshelper = true是什麼意思?
- 9. 什麼是「while true do skip」
- 10. 「?」是什麼意思?調用jsp的標記是什麼意思?
- 11. %{}是什麼意思?
- 12. '#'是什麼意思?
- 13. 「?」是什麼意思?
- 14. #{...}是什麼意思?
- 15. || =是什麼意思?
- 16. @是什麼意思
- 17. $$ $$是什麼意思?
- 18. `/ * @`是什麼意思?
- 19. 「=」是什麼意思
- 20. + =是什麼意思?
- 21. {..} [..]是什麼意思?
- 22. 什麼是:!:意思?
- 23. @ []是什麼意思?
- 24. 什麼是「||」意思?
- 25. /([^.]*)\.(.*)/是什麼意思?
- 26. &**是什麼意思?
- 27. @(...)是什麼意思?
- 28. &@是什麼意思?
- 29. 「\\。\」,「\ ?? \」,「\\?\」,「\\」是什麼意思?
- 30. &=是什麼意思?
因爲您希望有一個反覆運行的任務,並且沒有結束條件,除了程序結束之外。 – HoLyVieR 2010-10-16 00:26:40
它被稱爲無限循環。也被稱爲加熱器。 – jcolebrand 2010-10-16 00:29:19
什麼語言? (這個括號只是增加了足夠的字符來使StackOverflow接受評論 - 他們有一個愚蠢的規則,即註釋必須超過等號字符。) – 2010-10-16 00:29:40