一些好的答案(特别是@ Garrett刚才的)给了一个棘手的问题,但我会为后代加上0.02美元.
这里没有简单的答案来解释如何在不看实际代码的情况下重构这个块,但我对它的反应是它需要重新设计.
For example, a way to call break ; from inside the check() function. (Possibly in other programming languages)
如果你要求Java不支持的不同中断(没有hack)并且有重复的check()和各种不同的循环退出/重复代码向我指出这是一个庞大而复杂的方法.以下是您可以考虑的一些想法:
>这里的一些代码块中的每一个都在做某事.如果你把它们用于自己的方法,那么它如何改变循环?
>也许可以将循环分解为一系列评论.不要深入研究代码,但要从概念上考虑它,看看是否有不同的配置.
>您的组织中是否有其他未参与此代码的开发人员看一看?如果你详细解释代码如何运作,他们可能会看到一些你不在杂草中的模式.
我也认为@ aix关于有限状态机的想法很好但我在编程旅程中需要使用这种机制很少次 – 主要是在模式识别期间.我怀疑使用较小的代码块重新设计代码并将其转化为方法将足以改进代码.
如果你想要实现状态机这里有更多细节.你可以有一个只运行一个调用方法的switch语句的循环.每种方法都会返回交换机的下一个值.这与您的代码完全不符,但类似于:
int state = 0;
WHILE: while(true) {
switch (state) {
case 0:
// 1st some code here
state = 1;
break;
case 1:
state = check();
break;
case 2:
return;
case 3:
break WHILE;
case 4:
// 2nd some code
state = 1;
break;
...
}
}
希望其中一些有帮助,祝你好运.