La forma ideal sería volver a factorizar el código para que ya no necesite una estructura de bucle anidado tan complicada. Dependiendo de cómo se vea el resto del código, los bucles b
y c
pueden ser candidatos para convertirse en funciones individuales, si no todo el bucle a
.
Dado que parece que los bucles b
y c
iteran sobre rangos adyacentes, ¿por qué no combinarlos y reducir un poco la anidación del bucle?
for (int a = 1; a <= 100; a++) //loop a (main loop)
{
int count = 1000;
while (count <= 3000) // combined loops 'b' and 'c'
{
if (count <= 2000)
{
// Old loop 'b' code
if (b == 1555)
goto fullbreak;
}
else
{
// Old loop 'c' code
...
}
count++;
}
}
fullbreak:
También puede utilizar una variable de estado en lugar del goto
. Si desea salir del antiguo bucle b
pero aún procesar el antiguo bucle c
, simplemente configure count = 2001
dentro del antiguo código de bucle b
.
Lo ideal sería al menos ser capaz de volver a este factor a algo más parecido a
for (int a = 1; a <= 100; a++) //loop a (main loop)
{
if (process_inner_loop(pass, required, args))
break;
}
donde la función process_inner_loop
envuelve sus dos bucles originales y devuelve un valor no nulo si desea salir de el bucle adjunto. Ahora, en lugar de usar goto
o variables de condición, simplemente puede return 1;
.
Si se me ha informado correctamente, algunos lenguajes de apoyar la construcción de romper 'N' donde 'n' es el número de bucles anidados para salir de. ¿Estoy en lo cierto? –
@Y http: // download-llnw.oracle.com/javase/tutorial/java/nutsandbolts/branch.html – Anycorn
@Andreas: este no es uno de ellos. @sundowatch: Refactorice su código, no solo resolverá su problema sino que su código será más limpio y más fácil de mantener. – GManNickG