我有一个嵌套的for-each和if-else案例,如下所示。在这些情况下,如果if-else基于if-else语句,我必须转到循环的开头或循环中的其他位置。 GOTO 是使用此类方案的唯一方法吗?或者它可以更好的设计? 为简洁起见,我只包括两个for-each,但在我的情况下,我有4个for-each和大约13个if-else语句。
答案 0 :(得分:3)
如果你的方法很长,那就是难闻的气味。将其分解为更小的方法或更小的类。这样可以更容易地跳到其他位置。
也许state machine principles会帮助您设置下一个状态。
答案 1 :(得分:3)
转到不是唯一的方法,但它可能是做这种“多级continue
”的最干净的方法。另一种方法是设置标志然后检查每个循环的顶部以查看是否设置了适当的标志,但如果这样做,则表示您正在操作状态,使代码更复杂if
条件,并且增加错误的可能性。
如果可以,请考虑重构。内部循环可以使用return
语句重构为自己的方法。
goto的一个常见用途是将控制转移到特定的开关盒 标签或switch语句中的默认标签。 goto语句 离开深层嵌套循环也很有用。