作者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/cn.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