如果「標誌」爲真,我必須執行步驟編號。 1否則跳過它。有沒有一種方法可以跳過循環中不必要的重複檢查。 (作爲標誌的值不改變,而循環的執行)檢查循環內的條件
private void method(boolean flag) {
while (man > woman) {
if (flag) {
// Step no. 1
System.out.println(flag);
}
}
}
如果「標誌」爲真,我必須執行步驟編號。 1否則跳過它。有沒有一種方法可以跳過循環中不必要的重複檢查。 (作爲標誌的值不改變,而循環的執行)檢查循環內的條件
private void method(boolean flag) {
while (man > woman) {
if (flag) {
// Step no. 1
System.out.println(flag);
}
}
}
我不確定在這個級別擔心優化是否高效。一般來說,讓程序運行並繼續下一個問題更爲重要。
說了這麼多,有一個名爲loop unswitching的優化,一些編譯器會爲你做。他們複製循環,一次和一次沒有條件,並將條件向外移動來選擇循環。 (在你的例子中,你可以使整個循環有條件,但我認爲這只是Stack Overflow簡化的人爲因素。)
但這只是一個理由,不要過多擔心優化問題,至少直到你有一個配置文件,你知道這個代碼區域負責可檢測的運行時間量。
不過,這是最好的清潔,你可以通過類似這樣的問題令人費解會教你的東西好寫代碼...
事實上,循環不變條件語句打擾我了。我不相信有一個普遍的答案。有更高級的函數或lambda表達式,「編譯器留下的答案」,重構整個外部例程的答案......我通常會批准任何使代碼看起來更小的代碼。你必須爲了區分優先......
這取決於do
範圍。如果do
始終爲真,則不需要檢查它,並且可以刪除if (do)
。如果變量始終爲真,沒有理由將變量設置爲真。範圍是什麼?
如果價值做在迴路中的任何時候變化,你必須檢查每一次它除非你重寫代碼,以便做==真狀態電流回路外處理(也許在一個更小的循環中;這取決於你想要做什麼[沒有雙關語意圖])。
while (man > woman) {
小心無限循環這裏:-)
從提供的信息。目前還不清楚你想要做什麼。你能詳細說明嗎? – cschol 2009-11-15 20:20:54
跳過檢查的唯一方法是創建兩個循環,一個與步驟,一個沒有它 – 2009-11-15 20:51:50
看起來像我的功課可疑... Vishal - 你爲什麼不發佈你正在工作的真正問題,以及你的關於這件事的想法是...... – 2009-11-16 04:28:17