※ 引述《henry4343 (henry)》之銘言:
: 請問一下兩層以上的for迴圈要break有什麼好方法嗎?
: 目前的作法是:
: isBreak = fasle;
: for () {
: for () {
: if() {
: isBreak = true;
: break;
: }
: }
: if(isBreak) {
: break;
: }
: }
: 但如果再更多層不就要多一堆boolean判斷,原本在obj-c內用goto就沒這問題,
: 但java好像沒有goto的功能?
: 感謝
我自己參考某本書的作法是
一個迴圈存在於一個方法
及或搭配參數傳值作為使用
例如
:label1:
for(){
:label2
for(){
:label3
for(){
}
}
}
則會有三個方法
boolean label1(Bean bean,List list){
for(l in list){
if( label2(bean,l) ){
return true:
}
}
return false;
}
boolean label2(Bean bean,Object l){
for(o : find(l)){
if(label3(bean,o)){
return true;
}
}
return false;
}
boolean label3(Bean bean,Object o){
if(XXXX(o)){
bean.sss();
return true;
}
return false;
}
goto不建議使用
其實還是因為容易在冗長的迴圈及判別程式碼裡面混淆了
我剛學java的時候,還不能理解java文件中說明了雖然有goto label但不建議使用
是後來在維護cobol的時候,才發現goto真的不能亂用
還是乖乖的重構去分離成方法才比較好維護
好用歸好用
但是除非只寫一次
不然對於維護來說
還是把迴圈抽離出來或是重新定義流程比較實在
通常來說我都會把這種東西分離成兩個議題
1.符合條件的定義
2.當符合條件的處理