Ich habe ein Schriftsystem implementiert, das über char switch-Anweisungen herausfindet, welcher Buchstabe verwendet werden soll. In meinem Schriftbild sind nur Großbuchstaben enthalten. Ich muss es so machen, dass zum Beispiel 'a' und 'A' beide die gleiche Ausgabe haben. Anstatt doppelt so viele Fälle zu haben, könnte es sich um Folgendes handeln:
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;
}
Ist das in Java möglich?
java
char
switch-statement
GlassZee
quelle
quelle
Antworten:
Sie können switch-case fall through verwenden, indem Sie die
break;
Anweisung weglassen .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; }
... oder Sie können sich einfach auf Klein- oder Großbuchstaben normalisieren, bevor Sie
switch
fortfahren.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; }
quelle
c
würde ich dastoUpperCase
Innere des Schalters stecken, wenn es nicht möglich ist, dass der Fall erhalten bleibt . Aber +1, da dies viele Zeilen unnötigercase
Aussagen erspart :-)Oben meinst du ODER nicht UND. Beispiel für AND: 110 & 011 == 010, das ist keines der Dinge, nach denen Sie suchen.
Für OR haben Sie nur 2 Fälle ohne Pause am 1 .. Z.B:
case 'a': case 'A': // do stuff break;
quelle
Die oben genannten sind alle ausgezeichnete Antworten. Ich wollte nur hinzufügen, dass, wenn mehrere Zeichen geprüft werden müssen, ein Wenn-Sonst besser ausfallen könnte, da Sie stattdessen Folgendes schreiben könnten.
// 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 }
Wenn dies komplizierter wird, würde ich natürlich einen Regex-Matcher empfehlen.
quelle
== 0
das ist nicht richtig. Das heißt "istc
das erste Zeichen der Zeichenfolge?", Sie möchten wahrscheinlich entweder>= 0
oder!= -1
.Character
, z. B. aus dem Fall "is digit".Soweit ich Ihre Frage verstehe, können Sie das Zeichen vor der Übergabe an die switch-Anweisung in Kleinbuchstaben konvertieren. Sie müssen sich also keine Gedanken über Großbuchstaben machen, da diese automatisch in Kleinbuchstaben umgewandelt werden. Dafür müssen Sie die folgende Funktion verwenden:
quelle
Beobachtungen an einer interessanten
Switch case
Falle ->fall through
vonswitch
"Die break-Anweisungen sind notwendig, da Anweisungen in switch-Blöcken ohne sie durchfallen:" Beispiel von Java Doc
Ausschnitt aus aufeinanderfolgenden
case
ohnebreak
:char c = 'A';/* switch with lower case */; switch(c) { case 'a': System.out.println("a"); case 'A': System.out.println("A"); break; }
O / P für diesen Fall ist:
A
Aber wenn Sie den Wert von c ändern, dh
char c = 'a';
, dann wird dies interessant.O / P für diesen Fall ist:
a A
Obwohl der zweite Falltest fehlschlägt, wird das Programm gedruckt
A
, da es fehltbreak
, wodurchswitch
der Rest des Codes als Block behandelt wird. Alle Anweisungen nach dem übereinstimmenden Falletikett werden nacheinander ausgeführt.quelle