作者lovdkkkk (dk)
看板java
標題Re: [問題] 兩層以上的for迴圈break?
時間Thu Jun 12 22:06:39 2014
※ 引述《henry4343 (henry)》之銘言:
: 請問一下兩層以上的for迴圈要break有什麼好方法嗎?
: 目前的作法是:
: isBreak = fasle;
: for () {
: for () {
: if() {
: isBreak = true;
: break;
: }
: }
: if(isBreak) {
: break;
: }
: }
: 但如果再更多層不就要多一堆boolean判斷,原本在obj-c內用goto就沒這問題,
: 但java好像沒有goto的功能?
: 感謝
或許可以把判斷直接寫進 for () ?
for (...; ... && !isBreak; ...) {
...
for () {
...
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.197.13
※ 文章網址: http://webptt.com/m.aspx?n=bbs/java/M.1402582002.A.47F.html
1F:→ Killercat:那還是會跑完全部第二圈才有機會出來啊.... 06/12 23:40
2F:→ lovdkkkk:第二圈跟原本的一樣用 break, 只是把後面的 if 搬上去 @@ 06/13 00:18
3F:→ Killercat:其實前面在想的就是避免這個flag 不過我是覺得都還可以 06/13 12:43
4F:→ longlongint:寫成函數直接return吧 06/13 16:24
後來多想了一下,
這種寫法只能用在內層 break 後沒做任何事立刻重跑外層的情況,
還是用 label 或 return 能真的全停。
其中 label 又有最大的彈性,可以隨便跳外面哪一層,
return 就只能直接整個停掉。
不過 label 如前面推文說到的並不建議使用,
(雖然真的是好用啊...)
而 return... 有另外的問題,
想像一個如原 po 所說更複雜的多層廻圈,
如果中間任何地方都可能 call 個 return 結束,
似乎也不是那麼易讀。
一些相關討論
Good programming habits with return statements [closed]
http://ppt.cc/Yy9H
Is it bad style to use 'return' to break a for loop in Java?
http://ppt.cc/CRDf
或許順好流程,避免 "更複雜的多層廻圈" 出現才是根本解決之道。
5F:→ JustinHere:filter, map, reduce, flatMap ... 06/16 07:23
當 "多層" 是必需時,
可以努力的就是設法讓它不要 "複雜"...XD
6F:→ JustinHere:重構…一次做一件事…xd 06/16 11:57
7F:→ lovelycateye:每層迴圈一定代表某見事情,分層抽出去 return 就好 06/16 16:07
嗯嗯,用 return 的話這樣也能解一部份,
不過一次要跳出兩層 (4 -> 2) 的話還是需要判斷式。
"每層迴圈一定代表某見事情" 這也是一個重點,
因為假如此句為真,
那照理說中止條件都可以寫在 for (...),
最多也只會中途 break 一層,
會需要另外寫判斷式一次跳掉多層感覺若不是幾件事攪在一起,
可能就是一件事拆成幾個廻圈,
上面所謂 "順好流程" 就是要檢查這類情況。
前面 Killercat 大大推文提到的 Chain of Responsibility 可能是一個解法,
因為那本身就是要做到 Chain 中的每一環只處理一件事,
至於要怎麼把 for 廻圈轉成那樣...還要再參詳參詳 0rz
※ 編輯: lovdkkkk (36.226.197.13), 06/16/2014 19:30:58