studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones java char switch-statement

reales - Declaración de cambio de Java-¿Es "o"/"y" posible?



libro de android studio en español pdf (5)

Arriba, quieres decir O no AND. Ejemplo de AND: 110 & 011 == 010 que no es ninguna de las cosas que estás buscando.

Para quirófano, solo tiene 2 casos sin el descanso en el 1er. P.ej:

case ''a'': case ''A'': // do stuff break;

Implementé un sistema de fuentes que averigua qué letra usar a través de declaraciones de cambio de char. Solo hay letras mayúsculas en mi imagen de fuente. Necesito hacerlo de modo que, por ejemplo, ''a'' y ''A'' tengan el mismo resultado. En lugar de tener 2 veces la cantidad de casos, ¿podría ser algo como lo siguiente?

char c; switch(c){ case ''a'' & ''A'': /*get the ''A'' image*/; break; case ''b'' & ''B'': /*get the ''B'' image*/; break; ... case ''z'' & ''Z'': /*get the ''Z'' image*/; break; }

¿Es esto posible en Java?


Lo anterior son todas respuestas excelentes. Solo quería agregar que cuando hay varios personajes para controlar, un if-else podría resultar mejor ya que en su lugar podría escribir lo siguiente.

// switch on vowels, digits, punctuation, or consonants char c; // assign some character to ''c'' if ("aeiouAEIOU".indexOf(c) != -1) { // handle vowel case } else if ("!@#$%,.".indexOf(c) != -1) { // handle punctuation case } else if ("0123456789".indexOf(c) != -1) { // handle digit case } else { // handle consonant case, assuming other characters are not possible }

Por supuesto, si esto se vuelve más complicado, recomendaría un matizador de expresiones regulares.


Observaciones sobre una interesante trampa de Switch case -> fall through del switch

"Las declaraciones de interrupción son necesarias porque sin ellas, las instrucciones en los bloques de conmutación no se cumplen:" Ejemplo de Java Doc

Fragmento de case consecutivo sin break :

char c = ''A'';/* switch with lower case */; switch(c) { case ''a'': System.out.println("a"); case ''A'': System.out.println("A"); break; }

O / P para este caso es:

A

Pero si cambia el valor de c, es decir, char c = ''a''; , entonces esto se pone interesante.

O / P para este caso es:

a A

A pesar de que la segunda prueba de caso falla, el programa pasa a la impresión A , debido a falta de break que provoca que el switch trate el resto del código como un bloque. Todas las instrucciones después de la etiqueta de la caja coincidente se ejecutan en secuencia.


Puede utilizar el cambio de mayúsculas al omitir el break; declaración.

char c = /* whatever */; switch(c) { case ''a'': case ''A'': //get the ''A'' image; break; case ''b'': case ''B'': //get the ''B'' image; break; // (...) case ''z'': case ''Z'': //get the ''Z'' image; break; }

... o podría simplemente normalizarse en minúsculas o mayúsculas antes de switch .

char c = Character.toUpperCase(/* whatever */); switch(c) { case ''A'': //get the ''A'' image; break; case ''B'': //get the ''B'' image; break; // (...) case ''Z'': //get the ''Z'' image; break; }


Según lo que entiendo acerca de su pregunta, antes de pasar el carácter a la declaración de cambio, puede convertirlo a minúscula. Por lo tanto, no debe preocuparse por las mayúsculas ya que se convierten automáticamente en minúsculas. Para eso necesitas usar la siguiente función:

Character.toLowerCase(c);