72 votes

Java Instruction Switch - Est "ou"/"et" possible?

J'ai mis en place un système de polices qui découvre la lettre d'utilisation par l'intermédiaire de char instructions de commutation. Il y a uniquement des lettres majuscules dans ma police d'image. J'ai besoin de faire en sorte que, par exemple, 'a' et 'A' tous les deux ont la même sortie. Au lieu d'avoir 2x la quantité de cas, pourrait-il être quelque chose comme ce qui suit:

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;
}

Est-ce possible en java?

184voto

Matt Ball Points 165937

Vous pouvez utiliser le commutateur-cas de l'automne jusqu'en omettant l' break; déclaration.

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;
}

...ou vous pouvez normaliser pour en minuscules ou en majuscules avant d' switching.

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;
}

18voto

Dinah Points 15711

Ci-dessus, tu veux dire OU pas ET. Exemple de ET: 110 & 011 == 010, qui n'est ni de ce que vous cherchez.

OU, il suffit d'avoir 2 cas sans le casser sur la 1ère. Par exemple:

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

7voto

scorpiodawg Points 1774

Le ci-dessus sont toutes d'excellentes réponses. Je voulais juste ajouter que, quand il y a plusieurs personnages à vérifier, un si-d'autre pourrait mieux depuis que vous pourriez écrire la suite.

// 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
}

Bien sûr, si cela devient plus compliqué, je vous recommande une regex matcher.

1voto

Manan Pancholi Points 58

Ce que je comprends au sujet de votre question, avant de passer le personnage dans l'instruction switch, vous pouvez le convertir en minuscules. Si vous n'avez pas à vous soucier des majuscules parce qu'ils sont automatiquement convertis en minuscules. Pour cela vous devez utiliser la sous fonction:

Character.toLowerCase(c);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X