Ayuda con Switch anidados

Iniciado por Fryuio, 3 Diciembre 2016, 12:47 PM

0 Miembros y 1 Visitante están viendo este tema.

Fryuio

Bueno mi pregunta es sencilla, cómo hago para salir de switch anidados, pero no al anterior, sino al 1º de todos. Ejemplo:
Código (java) [Seleccionar]

public class prueba_ {

public static void main(String[] args) {
int a;
int b;
int c;
do {
/*Supongamos inicio a */
switch (a) {
case 1: /*Sentencias... */ break;
case 2: /*Sentencias... */ break;
case 3: /*Sentencias... */ break;
case 4: 

do {
/*Supongamos inicio b */
switch (b) {
case 1: /*Sentencias... */ break;
case 2: /*Sentencias... */ break;
case 3:
do {
/*Supongamos inicio c */
switch (c) {
case 1: /*Sentencias... */ break;
case 2: /*Sentencias... */ break;
default: break;
}
} while (c<2);
default: break;
}
} while (b<3);
default: break;
}
} while (a<4);
}

}


Como podría por ejemplo ir directamente del case 1 del switch c, al switch a.
Gracias de antemano.

ivancea96

Lo normal es que vaya a donde quieras de forma "natural". Por ejemplo, tienes un do-while. Su condición, si es false, lo haría salir al anterior, y luego lo mismo para el B.
También puedes poner una flag:
Código (java) [Seleccionar]
boolean salir = false;
do{
    // switch
    salir = true;
}while(/* tu condición */ && !salir);


Otra opción, es con el "break with label":
Código (java) [Seleccionar]
search:
for (i = 0; i < arrayOfInts.length; i++) {
    for (j = 0; j < arrayOfInts[i].length; j++) {
        if (arrayOfInts[i][j] == searchfor) {
            foundIt = true;
            break search;
        }
    }
}

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html


Siempre que puedas, mi recomendación es que lo hagas sin labels, de la forma más estructurada posible (Otros lenguajes no te permitirán hacer lo del label)

Otra opción, sería dividir el código en funciones (donde sean necesarias). Así, tendrás 2 posibilidades: break y return. Return saldrá de todos los loops y switchs, mientras que break solo del primero.

Fryuio

Cita de: ivancea96 en  3 Diciembre 2016, 12:56 PM
Lo normal es que vaya a donde quieras de forma "natural". Por ejemplo, tienes un do-while. Su condición, si es false, lo haría salir al anterior, y luego lo mismo para el B.
También puedes poner una flag:
Código (java) [Seleccionar]
boolean salir = false;
do{
    // switch
    salir = true;
}while(/* tu condición */ && !salir);


Otra opción, es con el "break with label":
Código (java) [Seleccionar]
search:
for (i = 0; i < arrayOfInts.length; i++) {
    for (j = 0; j < arrayOfInts[i].length; j++) {
        if (arrayOfInts[i][j] == searchfor) {
            foundIt = true;
            break search;
        }
    }
}

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html


Siempre que puedas, mi recomendación es que lo hagas sin labels, de la forma más estructurada posible (Otros lenguajes no te permitirán hacer lo del label)

Otra opción, sería dividir el código en funciones (donde sean necesarias). Así, tendrás 2 posibilidades: break y return. Return saldrá de todos los loops y switchs, mientras que break solo del primero.

Muchas gracias pero lo que yo quiero no es retroceder al anterior, quiero ir directamente al primero.

ivancea96

Y eso te respondo. Con esas técncias, puedes hacerlo.