Wieso funktioniert mein Switch Case nicht ?!

W

Woutan

Neues Mitglied


Kann mir wer sagen wieso das nicht klappt ?!

https://ibb.co/zZ9W5QF
 
N

Neumi5694

Bekanntes Mitglied
Davon abgesehen funktioniert switch / case in jeder Sprache nur für fixe Werte.
Für Vergleiche brauchst du if-then-else.
 
mihe7

mihe7

Top Contributor
Davon abgesehen funktioniert switch / case in jeder Sprache nur für fixe Werte
Das ist nicht richtig. Mal abgesehen davon, dass man die Sprache selbst definieren könnte, gibt es z. B. in SQL eine erweiterte Form des SELECT CASE-Statements:
SQL:
SELECT name, CASE bmi
  WHEN < 20.5 THEN 'Untergewicht'
  WHEN < 25.5 THEN 'Idealgewicht'
  WHEN < 30.5 THEN 'Übergewicht'
  ELSE 'Fettleibigkeit'
END
FROM personen;
 
N

Neumi5694

Bekanntes Mitglied
In deinem SQL Beispiel ist das explizit anders benannt.
Mir ist keine Programmiersprache bekannt, in der switch/case so funktioniert.
 
mihe7

mihe7

Top Contributor
In deinem SQL Beispiel ist das explizit anders benannt.
Was spielen denn die Namen für eine Rolle? Mal abgesehen davon, entspräche diese Art der Verwendung auch eher der mathematischen Notation.

In JavaScript kannst Du z. B. tricksen:
Javascript:
var bmi = 27.0;

switch(true) {
    case bmi < 20.5: window.alert('Untergewicht'); break;
    case bmi < 25.5: window.alert('Idealgewicht'); break;
    case bmi < 30.5: window.alert('Übergewicht'); break;
    default: window.alert('Fettleibigkeit');
}
 
N

Neumi5694

Bekanntes Mitglied
Was spielen denn die Namen für eine Rolle?
Naja, wenn ich als Programmierer einen anderen Namen verwende, dann wird im Normalfall eine andere Methode aufgerufen oder ich krieg einen Syntaxerror.

Ok, das Java-Script-Ding ist schon ein ziemlich krasser Hack, muss ich zugeben.

Aber selbst hier vergleicht du 2 Werte auf Gleichheit (true mit dem Ergebnis des Vergleichs) und lässt keine Switch-Funktion über bmi ausführen.

Wie gesagt, eine switch-Funktion (die auch so heißt), die was anderes macht als Werte auf Gleichheit zu prüfen, ist mir noch nicht untergekommen, aber ich lass mich gerne korrigieren. Ist im Endeffekt aber auch wurscht.
 
mihe7

mihe7

Top Contributor
Wie gesagt, eine switch-Funktion (die auch so heißt), die was anderes macht als Werte auf Gleichheit zu prüfen, ist mir noch nicht untergekommen, aber ich lass mich gerne korrigieren.
Untergekommen ist mir ein solches Statement mit dem Namen "switch" allerdings auch noch nicht. Seltsam ist das schon irgendwie... :)

Historisch kann man durchaus nachvollziehen, dass ein switch-Statement auf Gleichheit gegen fixe Werte prüft. Dass man aber derart daran festhält, dass man in Sprachen, die auch komplexere Ausdrücke auswerten, andere Schlüsselwörter dafür verwendet, finde ich aber schon interessant.

Es ist schon fast erschreckend, dass mir das noch nie bewusst geworden ist. Gut, dass wir darüber gesprochen haben :D
 
M

Meniskusschaden

Top Contributor
Wie gesagt, eine switch-Funktion (die auch so heißt), die was anderes macht als Werte auf Gleichheit zu prüfen, ist mir noch nicht untergekommen, aber ich lass mich gerne korrigieren. Ist im Endeffekt aber auch wurscht.
Das ist aber schon ein ziemlich seltsames Kriterium. Es ist doch viel sinnvoller, statt namensgleicher Schlüsselwörter die jeweiligen Konzepte der verschiedenen Programmiersprachen zu vergleichen. Hier eben die Umsetzung für Mehrfachverzweigungen. Man würde doch auch beispielsweise eine Java do ... while Schleife immer mit der Pascal repeat ... until Schleife vergleichen, obwohl sie verschieden benannt sind.

In der Programmiersprache RPG wird es übrigens mit einer SELECT-Gruppe ähnlich wie in SQL gemacht (wobei das RPG-SELECT nichts mit dem SQL-SELECT zu tun hat - oder muß ich die wegen der Namensübereinstimmung nun doch miteinander vergleichen?;)):
Code:
SELECT;
  WHEN bmi < 20.5;
     result = 'Untergewicht';
  WHEN bmi < 25.5;
     result = 'Idealgewicht';
  WHEN bmi < 30.5;
     result = 'Übergewicht';
  OTHER;
     result = 'Fettleibigkeit';
ENDSL;
Das ist also im Grunde dasselbe, wie eine Mehrfachverzweigung mittels "else if", das in RPG ebenfalls möglich wäre. Insofern ist das Schlüsselwort SELECT eigentlich überflüssig, allerdings meines Erachtens schon besser lesbar.
 
N

Neumi5694

Bekanntes Mitglied
Das ist aber schon ein ziemlich seltsames Kriterium. Es ist doch viel sinnvoller, statt namensgleicher Schlüsselwörter die jeweiligen Konzepte der verschiedenen Programmiersprachen zu vergleichen. [...] Das ist aber schon ein ziemlich seltsames Kriterium. Es ist doch viel sinnvoller, statt namensgleicher Schlüsselwörter die jeweiligen Konzepte der verschiedenen Programmiersprachen zu vergleichen.
Nein, der Vergleich hinkt etwas.
Verschiedene Namen, die das Gleiche machen findest du häufig. Gleiche Namen, die verschiedenes machen, sind allerdings selten.

Wie gesagt, kennst du denn eine Sprache, die switch-case (unter diesem Namen) verwendet, das etwas anderes macht als Gleichheitsprüfung?

Ich denke, es gibt schon einen Grund, warum man so eisern daran festhält. Hab mich nicht ausgibig damit beschäftigt, aber mit scheint, dass switch/case von der Funktionsweise her noch ziemlich an Assembler angelehnt ist. Der Switch-Befehl springt anhand einer Tabelle einfach in die passende Code-Zeile (Wert == 5 -> Zeile 14, 6 -> Zeile 17, ...), da wird dann weitergemacht. Deshalb muss am Ende auch ein break oder return stehen, sonst fällt man in den nächsten Bereich rein, selbst wenn dessen Bedingung nicht gegeben ist. So was hast du mit if-then-else nicht, das kann nur switch.
Mittlerweile führt die Java-Version von Switch einen equals-Befehl aus (ging früher nicht, da musste man Strings manuell prüfen, dafür durfte früher der Wert auch null sein, das darf er jetzt nicht mehr), damit wird ist die Sache mit den Tabellen gegessen, das geht wirklich nur, wenn man vorgegebene fixe Werte hat. Mittlerweile ist man weg vom speicher- und resourcenschonenden Programmieren und ist dafür beim lesbaren Programmieren angekommen, das ist wichtiger.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ChrisPL4Y Wieso funktioniert dieses Programm nicht? Java Basics - Anfänger-Themen 6
S OOP Die Methode funktioniert, aber wieso? Java Basics - Anfänger-Themen 2
T Objektorientierte Programmierung - Kein Plan wieso das nicht funktioniert! Java Basics - Anfänger-Themen 6
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
A Erste Schritte Wieso funktioniert diese Klasse nicht Java Basics - Anfänger-Themen 11
R Wieso funktioniert dieses Array nicht? Java Basics - Anfänger-Themen 13
X Stack mit Oberklasse, wieso funktioniert es nicht? Java Basics - Anfänger-Themen 8
E Wieso funktioniert Boolean.parseBoolean(s) nicht? Java Basics - Anfänger-Themen 9
C Wieso funktioniert das Array nicht? Java Basics - Anfänger-Themen 10
M Wieso funktioniert dieser simple Code nicht? Java Basics - Anfänger-Themen 9
D array.toString() wieso funktioniert es nicht Java Basics - Anfänger-Themen 4
U Anfänger Frage - Ausgabe funktioniert nicht - Wieso? Java Basics - Anfänger-Themen 10
B Wieso funktioniert dieser Vergleich nicht? Java Basics - Anfänger-Themen 3
C Objekt1.equals(Objekt2) = immer false. Wieso? Java Basics - Anfänger-Themen 22
A Wieso bekomme ich hier zwei unterschiedliche Ausgaben? Java Basics - Anfänger-Themen 6
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
H Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
H Datentypen 64 Bit passt in 32 Bit, wieso? Java Basics - Anfänger-Themen 9
L Input/Output Wieso kommt diese Ausgabe? Java Basics - Anfänger-Themen 12
H Wieso wird mir ein Fehler angezeigt? Java Basics - Anfänger-Themen 5
H Wieso öffnet sich der Texteditor? Java Basics - Anfänger-Themen 6
B Wieso wird die Zeile "column" genannt und die Spalte "line"? Java Basics - Anfänger-Themen 12
B Wieso wird hier so viel als falsch angezeigt? Java Basics - Anfänger-Themen 2
B Wieso gibt er hier nur die ungeraden Zahlen aus? Java Basics - Anfänger-Themen 5
B Wieso gibt das Programm in der Console kein Ergebnis aus? Java Basics - Anfänger-Themen 2
A Wieso charAt(0) + charAt(3) = INT-Wert? Java Basics - Anfänger-Themen 5
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
P Cannot find symbol, wieso? Java Basics - Anfänger-Themen 5
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
T Wieso kann ich das jar file nicht starten? Java Basics - Anfänger-Themen 5
S Wieso wird mein JFrame transparent dargestellt? Java Basics - Anfänger-Themen 5
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
A Wieso übergibt der nicht die bearbeitete txt file Java Basics - Anfänger-Themen 8
Z Lotto-Programm Wieso klappt das? Java Basics - Anfänger-Themen 8
P Compiler-Fehler wieso zeigt der compiler ein else without if? Java Basics - Anfänger-Themen 3
X Connection reset, wieso? Java Basics - Anfänger-Themen 4
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
A Wieso kann ich nicht auf diese Variable zugreifen? Java Basics - Anfänger-Themen 6
A Wieso denn das??? Java Basics - Anfänger-Themen 2
A Wieso erscheinen die Objekte manchmal und manchmal nicht Java Basics - Anfänger-Themen 2
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C Klassen Wieso kein infiniter Regress? Java Basics - Anfänger-Themen 4
M ArrayList - remove() löscht nicht! - weiß nicht wieso! Java Basics - Anfänger-Themen 8
X Wieso mehrere JRE ordner? Java Basics - Anfänger-Themen 8
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
A Wieso wird immer 0 ausgegeben? Java Basics - Anfänger-Themen 4
R Wieso hat ein Konstruktor keinen Rückgabetyp? Java Basics - Anfänger-Themen 6
T JTable wird nicht erzeugt, wieso? Java Basics - Anfänger-Themen 17
S JTable removeRow() IndexOutOfBounceException - wieso? Java Basics - Anfänger-Themen 3
S wieso Fehlermeldung cannot find symbol hier Java Basics - Anfänger-Themen 10
N NumberFormatException, aber wieso? Java Basics - Anfänger-Themen 5
T Wieso kompiliert das? Java Basics - Anfänger-Themen 7
B Erste Schritte Programm kompiliert nicht. Wieso? Java Basics - Anfänger-Themen 14
Luk10 Wieso bricht die Rekursion nicht ab? Java Basics - Anfänger-Themen 3
B Warnung : Dead Code. Aber wieso? Java Basics - Anfänger-Themen 10
W Compiler-Fehler NullPointerException. Aber wieso? Java Basics - Anfänger-Themen 2
C Conways Game of Life / "Waldbrandsimulation": wieso temporäres Hilfs-Array?! Java Basics - Anfänger-Themen 8
R If-Abfrage liefert false zurück, wieso ? Java Basics - Anfänger-Themen 20
K Methode funzt nicht, wieso? Java Basics - Anfänger-Themen 12
H Wieso ist das eine Endlosschleife? Java Basics - Anfänger-Themen 8
R wieso Nullpoint und was mit Events ? Java Basics - Anfänger-Themen 14
R Wieso hänge ich hier in einer Endlosschleife (vermute ich zumindest)? Java Basics - Anfänger-Themen 2
J Wert wird überschrieben, weiß nicht wieso Java Basics - Anfänger-Themen 2
S wieso ist mein Code falsch? Java Basics - Anfänger-Themen 2
A Wieso terminiert das Programm nicht? Java Basics - Anfänger-Themen 4
B Wieso ein Fehler? illegal Starts of expression? Java Basics - Anfänger-Themen 12
radiac Wieso bekomme ich kein Bild drauf??? Java Basics - Anfänger-Themen 13
Hatebreed Keine Datenbankverbindung, wieso? (ClassNotFoundEscpetion) Java Basics - Anfänger-Themen 18
G Wieso enum Declaration nur außerhalb einer Methode möglich? Java Basics - Anfänger-Themen 9
S Wieso funtkioniert das SQL DELETE nicht? Java Basics - Anfänger-Themen 1
K Wieso schaltet meine CheckBox von selbst um ? Java Basics - Anfänger-Themen 31
fill0soph Wieso ist "Minus-Unendlich" == 1? Java Basics - Anfänger-Themen 4
G Wieso werdne die componentne nciht angezeigt Java Basics - Anfänger-Themen 4
B Primzahlen berechnen - Wieso unterschiedliche Java Basics - Anfänger-Themen 3
K Wieso wird "paint" nicht ausgeführt ? Java Basics - Anfänger-Themen 2
F Wieso java.lang.StackOverflowError (minimales programm) Java Basics - Anfänger-Themen 11
G Wieso eine nullpointerexception? Java Basics - Anfänger-Themen 6
G Wieso ist eine String-Übergabe keine by-reference-Zuweisung? Java Basics - Anfänger-Themen 7
K Wieso kommt ne NullPointerException Java Basics - Anfänger-Themen 3
N Wieso final ? Java Basics - Anfänger-Themen 4
H wieso syntax error bei else ? Java Basics - Anfänger-Themen 3
H wieso fehler ? must return a type of int. Java Basics - Anfänger-Themen 4
F Wieso werden Char-Werte wie Zahlen addiert? Java Basics - Anfänger-Themen 5
M Wieso zeichnet es nicht auf den JPanel Java Basics - Anfänger-Themen 7
V Wieso NullPointerException Java Basics - Anfänger-Themen 7
M Wieso finden andere nicht die main .class Java Basics - Anfänger-Themen 20
ven000m Wieso antwortet mein Server nicht mehr (Socket Anwendung) Java Basics - Anfänger-Themen 2
V Wie und wieso geht dieser Methodenaufruf? Java Basics - Anfänger-Themen 2
G Hilfe, wieso funzt das net? Java Basics - Anfänger-Themen 18
P Wieso kommt die Fehlermeldung ".class expected"? Java Basics - Anfänger-Themen 2
S java.lang.ArrayIndexOutOfBoundsException: 5 nur wieso? Java Basics - Anfänger-Themen 2
M wieso fehler das array nicht iniziiert obwohl es iniziiert Java Basics - Anfänger-Themen 3
P Wieso wird der komplette Inhalt im verzeichnis nicht gelösch Java Basics - Anfänger-Themen 5
philipp Wieso kann man nicht dividieren? Java Basics - Anfänger-Themen 11
G Wieso brauch java keine main() Methode? Java Basics - Anfänger-Themen 20

Ähnliche Java Themen

Anzeige

Neue Themen


Oben