Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Fryuio en 3 Diciembre 2016, 12:47 pm



Título: Ayuda con Switch anidados
Publicado por: Fryuio en 3 Diciembre 2016, 12:47 pm
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
  1. public class prueba_ {
  2.  
  3. public static void main(String[] args) {
  4. int a;
  5. int b;
  6. int c;
  7. do {
  8. /*Supongamos inicio a */
  9. switch (a) {
  10. case 1: /*Sentencias... */ break;
  11. case 2: /*Sentencias... */ break;
  12. case 3: /*Sentencias... */ break;
  13. case 4:  
  14.  
  15. do {
  16. /*Supongamos inicio b */
  17. switch (b) {
  18. case 1: /*Sentencias... */ break;
  19. case 2: /*Sentencias... */ break;
  20. case 3:
  21. do {
  22. /*Supongamos inicio c */
  23. switch (c) {
  24. case 1: /*Sentencias... */ break;
  25. case 2: /*Sentencias... */ break;
  26. default: break;
  27. }
  28. } while (c<2);
  29. default: break;
  30. }
  31. } while (b<3);
  32. default: break;
  33. }
  34. } while (a<4);
  35. }
  36.  
  37. }

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


Título: Re: Ayuda con Switch anidados
Publicado por: 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
  1. boolean salir = false;
  2. do{
  3.    // switch
  4.    salir = true;
  5. }while(/* tu condición */ && !salir);

Otra opción, es con el "break with label":
Código
  1. search:
  2. for (i = 0; i < arrayOfInts.length; i++) {
  3.    for (j = 0; j < arrayOfInts[i].length; j++) {
  4.        if (arrayOfInts[i][j] == searchfor) {
  5.            foundIt = true;
  6.            break search;
  7.        }
  8.    }
  9. }
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html (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.


Título: Re: Ayuda con Switch anidados
Publicado por: Fryuio en 3 Diciembre 2016, 19:23 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
  1. boolean salir = false;
  2. do{
  3.    // switch
  4.    salir = true;
  5. }while(/* tu condición */ && !salir);

Otra opción, es con el "break with label":
Código
  1. search:
  2. for (i = 0; i < arrayOfInts.length; i++) {
  3.    for (j = 0; j < arrayOfInts[i].length; j++) {
  4.        if (arrayOfInts[i][j] == searchfor) {
  5.            foundIt = true;
  6.            break search;
  7.        }
  8.    }
  9. }
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html (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.


Título: Re: Ayuda con Switch anidados
Publicado por: ivancea96 en 3 Diciembre 2016, 22:55 pm
Y eso te respondo. Con esas técncias, puedes hacerlo.