2009-11-15 89 views
3

如果「標誌」爲真,我必須執行步驟編號。 1否則跳過它。有沒有一種方法可以跳過循環中不必要的重複檢查。 (作爲標誌的值不改變,而循環的執行)檢查循環內的條件

private void method(boolean flag) { 
     while (man > woman) { 
      if (flag) { 
       // Step no. 1 
       System.out.println(flag); 
      } 
     } 
    } 
+0

從提供的信息。目前還不清楚你想要做什麼。你能詳細說明嗎? – cschol 2009-11-15 20:20:54

+0

跳過檢查的唯一方法是創建兩個循環,一個與步驟,一個沒有它 – 2009-11-15 20:51:50

+0

看起來像我的功課可疑... Vishal - 你爲什麼不發佈你正在工作的真正問題,以及你的關於這件事的想法是...... – 2009-11-16 04:28:17

回答

10

我不確定在這個級別擔心優化是否高效。一般來說,讓程序運行並繼續下一個問題更爲重要。

說了這麼多,有一個名爲loop unswitching的優化,一些編譯器會爲你做。他們複製循環,一次和一次沒有條件,並將條件向外移動來選擇循環。 (在你的例子中,你可以使整個循環有條件,但我認爲這只是Stack Overflow簡化的人爲因素。)

但這只是一個理由,不要過多擔心優化問題,至少直到你有一個配置文件,你知道這個代碼區域負責可檢測的運行時間量。

不過,這是最好的清潔,你可以通過類似這樣的問題令人費解會教你的東西好寫代碼...

事實上,循環不變條件語句打擾我了。我不相信有一個普遍的答案。有更高級的函數或lambda表達式,「編譯器留下的答案」,重構整個外部例程的答案......我通常會批准任何使代碼看起來更小的代碼。你必須爲了區分優先......

0

這取決於do範圍。如果do始終爲真,則不需要檢查它,並且可以刪除if (do)。如果變量始終爲真,沒有理由將變量設置爲真。範圍是什麼?

0

如果價值做在迴路中的任何時候變化,你必須檢查每一次它除非你重寫代碼,以便做==真狀態電流回路外處理(也許在一個更小的循環中;這取決於你想要做什麼[沒有雙關語意圖])。

0
while (man > woman) { 

小心無限循環這裏:-)