在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++;
}
在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++;
}
有些人可能會發現,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
這樣的代碼不會有所不同班級到班級。
我覺得'break'更直接,標誌更難調試,特別是如果你有多個標誌。當然,這是主要的意見基礎。 – Christian 2015-02-06 15:19:24
我在for循環中使用標誌實際上已經收到很多悲傷。然而,對於你說你應該'不''使用語言中的某些東西似乎有點可笑 – 2015-02-06 15:19:44
@Christian @austinwernli,我編輯說明這主要是一個意見問題,但我已經添加了一個例子我個人發現'break'的情況很難調試,但這又是一個意見。 – 2015-02-06 15:24:31
我要看你的意思是「最好」?隨着休息時間的推移,您可以儘早退出循環,以便更高效。
您可以儘早用標誌退出...... – 2015-02-06 15:21:30
我寧願第一個,原因goto
被認爲是有害的。而exit
就像是goto
。但更重要的是:在編寫if
子句時,請始終使用{}
。
另外,使用條件時,請指定一個名稱。理解ageBelow18
而不是(我知道代碼是不正確的)幾乎更簡單。
break
存在是有原因的吧!
while(a < 5){
if(a == 3)
break;
else
a++;
}
非常簡單的答案,去休息,少標誌,少調試,更容易維護。從while
變爲for
循環很簡單,不需要對邏輯進行任何修改。想想你需要添加更多條件的場景......
我的意見是,如果你不明白break
和continue
的用法,那麼你可能會一直爲國旗。但是,不僅有一個答案。你的問題是什麼選擇是更好的退出循環,從你的兩個例子,選項很簡單。我的意見是break
之一。
現在有些人會使用標誌和一些中斷,他們給代碼樣本更適合。但這不是你的問題!
我可以給你很多例子,其中一些我會去flag
和其他的break
和一些混合兩者。這取決於我的循環將要處理什麼。
break
是爲了表明,如果我們達到這個條件,我們將退出循環emiditely。這在一些循環邏輯中非常重要。 即使當你/同事添加更多的邏輯時,在該條件之前或之後,環路仍然會退出到達break
的地方。
有時候你可能想標記你達到了一個條件,但是仍然想要通過循環覆蓋的所有指令,這裏有一個bool幫助你停止循環,但是在它通過所有的邏輯之後。
如果您不以正確的方式使用標誌/中斷,那麼您的系統可能會非常奇怪,特別是在添加新邏輯時。
請記住,您也可以使用帶有標籤的break
和continue
,該標籤不太常見但很好知道。
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");
}
}
第一個片段在語法上是錯誤的 - =
是賦值運算符。您正在尋找平等的運營商,==
:
while ((a < 5) && (exit == false)) {
或者更好的是,因爲exit
是boolean
,只需直接評價它:
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
,並不意味着你應該盲目地總是使用它們。選擇使代碼看起來更好,更易於維護的內容。
你提交的這兩個選項都不如兩個選擇。
看到,因爲你直接簡單的比較後退出循環,則最好的選擇是:
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)
表明退出循環的唯一方法是休息,所以程序員應該留意他們。這些中斷也應該在循環體的頂部組合在一起,所以它們可以作爲防護措施,防止循環體在命中條件時被執行。
我會選擇break語句,因爲:
還有一個continue關鍵字可以讓你在必要時跳過部分代碼。
我對此的看法是,這確實是一個意見問題。您選擇的替代方案還包括例外和退貨聲明。 – njzk2 2015-02-06 15:19:16
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
省略第二個片段中多餘的「else」。 – xehpuk 2015-02-06 15:24:45