String in switch - case

Status
Nicht offen für weitere Antworten.

Silas89

Mitglied
Ich sollte für ein Programm Telefonnummern verschiedenen Personen zuweisen, jede Nummer einer anderen.

Ich habe 20 Nummern, die leider ganz verschieden notiert sind, dieselbe Nummer aber immer gleich. Teilweise mit Abständen, teilweise ohne, teilweise woanders, teilweise mit Landesvorwahl, teilweise ohne etc.
Es werden aus einer Datei diese Nummern ausgelesen und dann sollte anstelle der Nummer nur der Name ausgegeben werden. Da es 20 Nummern sind ist mir verschachtelte If-Else zu chaotisch. Switch - Case sei aber nicht möglich, wurde mir gesagt. Kann ich das irgendwie umgehen?

Gruss

Silas
 
Du kannst nur folgende Datentypen benutzen:
Code:
byte
char
short
int

Also du hast Ziffern in einem String? Am besten den String bearbeiten (trim, leerzeichen entfernen etc) und dann einfach in einen erlaubten primitiven Typ parsen:

Code:
String s = "1";
int i = Integer.parseInt(s);
 
schreibe die 20 Namen in ein Array,
durchlaufe das Array um den Namen zu vergleichen und erhalte so einen Index -1 (nicht gefunden) oder 0-19,

dann machst du ein switch über 0-19,
nicht schön aber kürzer

statt Array ginge auch eine Map, die von String -> Integer mappt
 
Weis nicht ob ich dich richtig verstanden habe aber du könntest doch auch eine Map nehmen.

ms
 
ein echter Nachteil des Java switches, meiner Meinung nach. Wird zum Glück in Java 7 behoben.

Ich würde empfehlen entweder mit enum zu arbeiten oder String#hashCode() zu benutzen.
 
oder String#hashCode() zu benutzen.
hashcode ist aber nicht immer eindeutig, zwar selten, aber wir kennen ja alle Murphys law.

Den Fehler will ich nciht suchen müssen...


Wenn man mehr vom Programm sehen würde könnte man viellciht bessere Tipps geben, zB. kann in manchen Fällen Konditionale Logik durch State/Strategy ersetzt werden.

ein echter Nachteil des Java switches, meiner Meinung nach.
Persönlich habe ich dieses feature nie vermisst.
 
hashcode ist aber nicht immer eindeutig, zwar selten, aber wir kennen ja alle Murphys law.

Den Fehler will ich nciht suchen müssen...

Schon aber bei nur 20 verschiedenen Kombinationen? Das ist schon sehr sehr sehr sehr unwahrscheinlich. Er kennt die Kombinationen ja vorher, ein kleiner Test um auf doppelte Werte zu testen ist da ja problemlos drin.

Die emun Variante passt aber sowieso besser hier 😉
 
und selbst wenn man hasCode bevorzugt: ne HashMap und die Eindeutigkeit kommt umsonst dazu,
und man muss sich nicht merken, dass "abc" zu 4907409 gehört 😉
 
googlen brauchst du nicht. Schau dir den obersten Thread im Allgemeinem Forum an http://www.java-forum.org/de/topic68169_frage-switch-enums.html

statt Wochentagen nimmst du halt deine Telefonnummern.
Aus diesem Thread kopiert:
Code:
enum Wochentage { 
       montag, dienstag, mittwoch, donnerstag, freitag, samstag, sonntag 
    } 
 
    public static void main(String... argv) throws Exception { 
       Wochentage tage = Wochentage.montag; 
 
       switch (tage) { 
       case samstag: 
       case sonntag: 
          System.out.println("Wochenende. Party!"); 
       } 
 
    }
 
ich dachte schon vorhin, als Joker 'Die emun Variante' schrieb,
dass er wohl gedanklich in dem anderen Thread ist 😉
 
Ah, habs grad mit Array begonnen, ich denke mal, dass ich das mit enum danach noch mache, einfach um etwas zu üben :-D (Ich bin ja Azubi und hab sowieso kaum Lohn ;-))
 
um nochmal an ms zu erinnern:
wenn die Aufgabe wirklich nur 'dann sollte anstelle der Nummer nur der Name ausgegeben werden' ist,
dann brauchst du überhaupt keine Indexe, sondern eine Map String -> String mit
"424244" -> "Hans Müller"
und kannst direkt den Namen zur Nummer abfragen
 
stimmt, aus irgendwelchen gründen hab ich überlesen, das er die Nummern aus einer dynamischen Datei einliest. Das mach die emun Variante natürlich nicht passend in diesem Fall.
 
Ist erledigt und funktioniert wunderbar, ich hab auch gleich noch einen anderen Teil mit Array vereinfacht. Hatte einfach die idee gar nicht Arrays zu benutzen.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben