J'ai mis en place un système de polices qui détermine quelle lettre utiliser via les instructions de changement de caractère. Il n'y a que des lettres majuscules dans mon image de police. Je dois faire en sorte que, par exemple, "a" et "A" produisent le même résultat. Au lieu d'avoir deux fois plus de cas, cela pourrait-il ressembler à ceci:
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?
Vous pouvez utiliser l’option switch-case fall en omettant le 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 simplement normaliser à minuscule ou majuscule avant switch
ing.
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;
}
Ci-dessus, vous voulez dire OR pas AND. Exemple de AND: 110 & 011 == 010 qui n’est ni l’une des choses que vous recherchez.
Pour OR, il suffit d’avoir 2 cas sans pause le 1er. Par exemple:
case 'a':
case 'A':
// do stuff
break;
Les réponses ci-dessus sont toutes d'excellentes réponses. Je voulais juste ajouter que quand il y a plusieurs personnages avec lesquels vérifier, un if-else pourrait être meilleur puisque vous pourriez plutôt écrire ce qui suit.
// 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 recommanderais un matcher regex.
Observations sur un intéressant Switch case
piège -> fall through
de switch
"Les instructions de séparation sont nécessaires car sans elles, les instructions des blocs de commutation tombent:" exemple de Java Doc
Extrait de case
consécutif sans 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 pour ce cas est:
A
Mais si vous changez la valeur de c, c.-à-d., char c = 'a';
, alors cela devient intéressant.
O/P pour ce cas est:
a A
Même si le deuxième test de cas échoue, le programme passe à print A
en raison de l'absence de break
, ce qui fait que switch
traite le reste du code comme un bloc. Toutes les instructions qui suivent le libellé de casse correspondant sont exécutées en séquence.
D'après ce que j'ai compris de votre question, avant de passer le caractère à l'instruction switch, vous pouvez le convertir en minuscule. Ainsi, vous n'avez pas à vous soucier des majuscules car elles sont automatiquement converties en minuscules. Pour cela, vous devez utiliser la fonction ci-dessous:
Character.toLowerCase(c);