Re: [問題] 兩層以上的for迴圈break?

看板java作者 (dk)時間11年前 (2014/06/12 22:06), 11年前編輯推噓0(007)
留言7則, 5人參與, 最新討論串5/8 (看更多)
※ 引述《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://www.ptt.cc/bbs/java/M.1402582002.A.47F.html

06/12 23:40, , 1F
那還是會跑完全部第二圈才有機會出來啊....
06/12 23:40, 1F

06/13 00:18, , 2F
第二圈跟原本的一樣用 break, 只是把後面的 if 搬上去 @@
06/13 00:18, 2F

06/13 12:43, , 3F
其實前面在想的就是避免這個flag 不過我是覺得都還可以
06/13 12:43, 3F

06/13 16:24, , 4F
寫成函數直接return吧
06/13 16:24, 4F
後來多想了一下, 這種寫法只能用在內層 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 或許順好流程,避免 "更複雜的多層廻圈" 出現才是根本解決之道。

06/16 07:23, , 5F
filter, map, reduce, flatMap ...
06/16 07:23, 5F
當 "多層" 是必需時, 可以努力的就是設法讓它不要 "複雜"...XD

06/16 11:57, , 6F
重構…一次做一件事…xd
06/16 11:57, 6F

06/16 16:07, , 7F
每層迴圈一定代表某見事情,分層抽出去 return 就好
06/16 16:07, 7F
嗯嗯,用 return 的話這樣也能解一部份, 不過一次要跳出兩層 (4 -> 2) 的話還是需要判斷式。 "每層迴圈一定代表某見事情" 這也是一個重點, 因為假如此句為真, 那照理說中止條件都可以寫在 for (...), 最多也只會中途 break 一層, 會需要另外寫判斷式一次跳掉多層感覺若不是幾件事攪在一起, 可能就是一件事拆成幾個廻圈, 上面所謂 "順好流程" 就是要檢查這類情況。 前面 Killercat 大大推文提到的 Chain of Responsibility 可能是一個解法, 因為那本身就是要做到 Chain 中的每一環只處理一件事, 至於要怎麼把 for 廻圈轉成那樣...還要再參詳參詳 0rz ※ 編輯: lovdkkkk (36.226.197.13), 06/16/2014 19:30:58
文章代碼(AID): #1JcRFoH_ (java)
討論串 (同標題文章)
文章代碼(AID): #1JcRFoH_ (java)