2015-02-06 124 views
2

在Java中結束loop的最佳方法是什麼?在Java中退出循環的最佳方式是什麼?

此:

boolean exit = false; 

while((a < 5) && (exit = false)){ 
    if(a == 3) 
     exit = true; 
    else 
     a++; 
} 

或者這樣:

while((a < 5){ 
    if(a == 3) 
     break; 
    else 
     a++; 
} 
+4

我對此的看法是,這確實是一個意見問題。您選擇的替代方案還包括例外和退貨聲明。 – njzk2 2015-02-06 15:19:16

+1

http://stackoverflow.com/questions/3922599/is-it-a-bad-practice-to-use-break-in-a-for-loop,http://stackoverflow.com/questions/18188123/is -it-bad-practice-to-use-break-to-exit-a-loop-in-java,http://programmers.stackexchange.com/questions/58237/are-break-and-continue-bad-programming - 實踐 – Sikorski 2015-02-06 15:22:21

+0

省略第二個片段中多餘的「else」。 – xehpuk 2015-02-06 15:24:45

回答

4

有些人可能會發現,break是難以調試(個人而言,我更喜歡使用flag),但它主要是見仁見智。

試想一個loop體包含超過500行代碼,與位於任何地方的一些break報表,它可能更難,您可以直觀退出loop的一切準備。

爲什麼我喜歡使用flag的另一個原因是,您可以爲結束點指定明顯的名稱,而不僅僅是break

請注意,您也可以在for循環示例使用flag

boolean flag = false; 
for(int i = 0; !flag && i < 10; i++) { 
// some treatment 
} 

這可能是有趣然而,要知道,與循環打交道時,有continue關鍵字,讓你可以不exit循環,但skip直接到下一個iteration

在Java中完成循環的最佳方法是什麼?

如果真是兩者之間的最佳途徑,Java可能不會允許其他;)

我想最重要的是使用相同的約定在您co-worker這樣的代碼不會有所不同班級到班級。

+6

我覺得'break'更直接,標誌更難調試,特別是如果你有多個標誌。當然,這是主要的意見基礎。 – Christian 2015-02-06 15:19:24

+1

我在for循環中使用標誌實際上已經收到很多悲傷。然而,對於你說你應該'不''使用語言中的某些東西似乎有點可笑 – 2015-02-06 15:19:44

+0

@Christian @austinwernli,我編輯說明這主要是一個意見問題,但我已經添加了一個例子我個人發現'break'的情況很難調試,但這又是一個意見。 – 2015-02-06 15:24:31

0

我要看你的意思是「最好」?隨着休息時間的推移,您可以儘早退出循環,以便更高效。

+2

您可以儘早用標誌退出...... – 2015-02-06 15:21:30

0

我寧願第一個,原因goto被認爲是有害的。而exit就像是goto。但更重要的是:在編寫if子句時,請始終使用{}

另外,使用條件時,請指定一個名稱。理解ageBelow18而不是​​(我知道代碼是不正確的)幾乎更簡單。

+2

關於'{}'建議,我不認爲這是必要的。這一切都取決於它是否使代碼更具可讀性。 – Christian 2015-02-06 15:24:16

+1

這是正確的。這是沒有必要的,但有多少人後來遇到問題,導致忽略它。 – dec 2015-02-06 15:31:01

+0

我也認爲在一個條件下做一個簡單的單行語句時真的不需要'{}'。 – 2015-02-06 15:34:00

4

break存在是有原因的吧!

while(a < 5){ 
    if(a == 3) 
     break; 
    else 
     a++; 
} 

非常簡單的答案,去休息,少標誌,少調試,更容易維護。從while變爲for循環很簡單,不需要對邏輯進行任何修改。想想你需要添加更多條件的場景......

我的意見是,如果你不明白breakcontinue的用法,那麼你可能會一直爲國旗。但是,不僅有一個答案。你的問題是什麼選擇是更好的退出循環,從你的兩個例子,選項很簡單。我的意見是break之一。

現在有些人會使用標誌和一些中斷,他們給代碼樣本更適合。但這不是你的問題!

我可以給你很多例子,其中一些我會去flag和其他的break和一些混合兩者。這取決於我的循環將要處理什麼。

break是爲了表明,如果我們達到這個條件,我們將退出循環emiditely。這在一些循環邏輯中非常重要。 即使當你/同事添加更多的邏輯時,在該條件之前或之後,環路仍然會退出到達break的地方。

有時候你可能想標記你達到了一個條件,但是仍然想要通過循環覆蓋的所有指令,這裏有一個bool幫助你停止循環,但是在它通過所有的邏輯之後。

如果您不以正確的方式使用標誌/中斷,那麼您的系統可能會非常奇怪,特別是在添加新邏輯時。

請記住,您也可以使用帶有標籤的breakcontinue,該標籤不太常見但很好知道。

class ContinueWithLabelDemo { 
    public static void main(String[] args) { 

     String searchMe = "Look for a substring in me"; 
     String substring = "sub"; 
     boolean foundIt = false; 

     int max = searchMe.length() - 
        substring.length(); 

    test: 
     for (int i = 0; i <= max; i++) { 
      int n = substring.length(); 
      int j = i; 
      int k = 0; 
      while (n-- != 0) { 
       if (searchMe.charAt(j++) != substring.charAt(k++)) { 
        continue test; 
       } 
      } 
      foundIt = true; 
       break test; 
     } 
     System.out.println(foundIt ? "Found it" : "Didn't find it"); 
    } 
} 
1

第一個片段在語法上是錯誤的 - =是賦值運算符。您正在尋找平等的運營商,==

while ((a < 5) && (exit == false)) { 

或者更好的是,因爲exitboolean,只需直接評價它:

while (a < 5 && !exit) { 

除此之外,你應該總是遵循您正在進行的項目的慣例。如果它的編碼風格更喜歡break s - 只需使用它們。如果它禁止他們,不要。

一旦您將項目指導方針的注意力放在窗口外面,這完全是一個偏好問題。就個人而言,我傾向於選擇break聲明,特別是如果我有幾個條件需要評估。例如:

while (a < 5) { 
    // do stuff 
    if (a == 3) { 
     break; 
    } 
    // do more stuff 
    if (b >= 19) { 
     break; 
    } 
    // etc... 
} 

但最終,您應該根據具體情況對其進行評估。喜歡我喜歡的break,並不意味着你應該盲目地總是使用它們。選擇使代碼看起來更好,更易於維護的內容。

0

你提交的這兩個選項都不如兩個選擇。

看到,因爲你直接簡單的比較後退出循環,則最好的選擇是:

while (a < 5 && a != 3) { 
    a++; 
} 

這是因爲你需要在執行前身體檢查兩個條件,你不需要做退出循環時有什麼特別之處。

但是,如果你需要確實需要一些特殊的邏輯,當某個條件被擊中,那麼你應該使用一段時間的真循環和休息。

while (true) { 
    if (a >= 5) { 
     break; // nothing special, just exit 
    } else if (a == 3) { 
     a *= 2; // double a before exiting loop 
     break; 
    } 
    a++; 
} 

while (true)表明退出循環的唯一方法是休息,所以程序員應該留意他們。這些中斷也應該在循環體的頂部組合在一起,所以它們可以作爲防護措施,防止循環體在命中條件時被執行。

0

我會選擇break語句,因爲:

  • 代碼更乾淨
  • 無需額外的代碼聲明
  • 調試的代碼更容易
  • 是很常見惹了不少在條件上聲明的標誌。你不想在同一行上獲得很多嵌套條件。

還有一個continue關鍵字可以讓你在必要時跳過部分代碼。

相關問題