2009-10-18 6 views
6

Tengo una pregunta de sí o no & respuesta. Me gustaría hacer otra pregunta sí o no si la respuesta fue sí. Mi instructor quiere que usemos charAt (0) como entrada para la respuesta.Pregunta de Java: ¿Es posible tener una declaración de cambio dentro de otra?

¿Es posible tener una instrucción switch dentro de otra (como una instrucción if anidada)?

Gracias de antemano.

EDIT: He aquí una muestra de mi pseudo código =

display "Would you like to add a link (y = yes or n = no)? " 
input addLink 

switch (link) 
    case 'y': 
     display "Would you like to pay 3 months in advance " + "(y = yes or n = no)?" 
     input advancePay 

       switch(advPay) 
         case 'y': 
       linkCost = 0.10 * (3 * 14.95) 

       case 'n' 
       linkCost = 14.95    
    case 'n' 
     linkCost = 0.00 
+16

en el tiempo que se ha tomado en escribir esta pregunta se podría haber probado usted mismo ... sólo decir ... –

+0

Creo que el objetivo de SO es que las personas * n no necesiten escribir código para probar una idea. –

+2

@ande_turner: no. SO está aquí para responder preguntas, no para hacer cosas en lugar de personas. –

Respuesta

14

Sí, pero no lo hacen. Si necesita un nivel de lógica adicional como ese, coloque el segundo Switch en su propio método con un nombre descriptivo.

EDITAR: Con el ejemplo que ha agregado, tiene dos condiciones booleanas. Yo recomendaría no utilizar el interruptor en absoluto, usando if & else condicionales en su lugar. Utilice (STRING.charAt(0) == 'y') como su caso de prueba, o algo metódico como boolean isY(final String STRING) { return (STRING.charAt(0) == 'y' || STRING.charAt(0) == 'Y'); }

+5

+1 por la concisión de "sí, pero no". – CPerkins

1

Es posible, pero eso sería muy intrincado y difícil de leer. Es casi seguro que hay una manera mejor, como llamar a un método dentro de la primera declaración de conmutación y realizar cualquier proceso más necesario (incluido otro conmutador si es necesario) en ese método.

0

La mayoría de los lenguajes de programación son ortogonales. Eso significa que usar una característica generalmente no depende de la ubicación, si es significativo.

Por ejemplo, no puede declarar una variable local como pública.

+1

@Srini: no veo cómo responde esto a la pregunta. Específicamente, no dice nada sobre si 'switch' en Java es ortogonal. La ortogonalidad es una propiedad que los diseñadores de lenguaje de programación se esfuerzan, pero rara vez logran por completo. No puede inferir que cualquier construcción de lenguaje particular será ortogonal sin entender la especificación del idioma. Puede ser una de las excepciones. –

2

Sí. Los conmutadores rompen el patrón de instrucción de bloque de idioma, pero esto se debe principalmente a C/C++ a partir del cual se basa la instrucción de conmutación utilizada por Java.

en los tres idiomas, la sentencia switch tiene la siguiente forma:

switch(variable) { 
    case n: 
     statement 1; 
     statement n; 
     (optional) break; 
    case n+1: 
     statement 1; 
     statement n; 
     (optional) break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 

Debido a que una sentencia switch rompe el patrón de lenguaje tradicional, muchos programadores envuelven sus múltiples declaraciones en un caso con el estilo tradicional del bloque: { }

Esto se debe a que la mayoría de las construcciones en los tres idiomas permiten que las sentencias de estilo de bloque se consideren como una sola instrucción, pero la instrucción switch no requiere estilo de bloque para ejecutar sentencias múltiples en un solo caso.

Sin la declaración de interrupción que separa cada caso, habrá una "caída": si el caso n coincidiera y no tuviera una interrupción, se ejecutaría el código debajo (caso n + 1) - caso n + 1 no tenía un salto y se correspondía, se ejecutaba el código predeterminado, si ninguno tenía un corte, cuando se hacía coincidir el caso n, se ejecutaba el código para el caso n, caso n + 1 y el valor predeterminado.

El valor predeterminado es opcional y especifica una acción predeterminada para que se ejecute una instrucción switch. Normalmente, la condición predeterminada es un controlador genérico o un buen lugar para lanzar una excepción si el valor lógicamente no puede ser otro que los valores en la instrucción switch.

para ilustrar una sentencia switch ejecutar dentro de una sentencia switch, echar un vistazo a este ejemplo artificial:

String message = null; 
int outerVariable = getOuterVariable(); 
switch(outerVariable) { 
    case n: 
     statement 1; 
     statement n; 
     break; 
    case n+1: 
     int innerVariable = getInnerVariable(); 
     switch(innerVariable) { 
      case 1: 
       message = "IT WAS 1"; 
       break; 
      default: 
       message = "WHY WOULD YOU DO THIS? OH THE HUMANITY!"; 
     } 
     break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 
+0

solo tenga cuidado con el código anterior; si lo está traduciendo a java, tenga en cuenta que las sentencias case deben ser expresiones constantes – Chii

+0

Chii - Buen punto. Además, las enumeraciones de Java 5 también están permitidas en las declaraciones de cambio. – MetroidFan2002

Cuestiones relacionadas