Warum funktioniert mein If Statement nicht richtig?

C

Capricornum

Mitglied
Liebe Java-Nutzer,
ich wäre sehr dankbar für eure Hilfe. Ich bin wirklich ganz unerfahren mit dem Programmieren im allgemeinen und somit auch mit Java.

In meinem Java Übungsbuch programmieren wir ein Mini-Programm, dass mir sagen soll ob ein in einem "JOptionPane" eingegebener, kleingeschriebener Buchstabe ein Vokal ist oder nicht. Dazu benutzen wir "if Statements": Viele davon untereinander verschachtelt:
if (c == 'a') { istVokal = true; } else { if (c == 'e') { istVokal =true; } und so weiter und so fort.
Um mir die komplizierte if Verschachtelung zu sparen dachte ich, ich probiere es mal alle Bedingungen in nur ein if Statement zu packen, also:
if (c == 'a' | c == 'e' | c == 'i') { istVokal = true; }
Ich habe mich sehr gefreut, als das tatsächlich funktionierte.
Dann habe ich probiert es noch mehr zu vereinfachen. Und zwar so:
if (c == ('a' | 'e' | 'i' | 'o' | 'u')) { istVokal = true; }
aber jetzt klappt es nicht mehr. Egal welchen Buchstaben ich nun in mein JOptionPane eingebe, ich bekomme die Antwort: ist kein Vokal (diese Antwort kommt sozusagen, wenn der definierte boolean "istVokal" == false ist.

Ich hoffe das macht Sinn. Könnt ihr mir erklären, warum mein letzter Versuch nicht mehr funktioniert?
Danke.
 
InfectedBytes

InfectedBytes

Top Contributor
Der gerade Strich | ist ein bitweises Oder. Durch 'a' | 'e' wird also das bitweise Oder auf die beiden Operanden 'a' und 'e' angewandt. Da beide Operanden nur Zahlen sind (ASCII), ist das Ergebnis auch wieder eine Zahl. Zum Schluss vergleichst du also eine Zahl c via == mit einer anderen Zahl.

Weiter als if (c == 'a' | c == 'e' | c == 'i') kannst du es nicht vereinfachen. Allerdings solltest du anstatt | besser || benutzen, dass ist ein Kurzschlussoperator. Angenommen c sei wirklich 'a', dann würde bei if(c=='a' || c=='e) der zweite Vergleich gar nicht ausgeführt werden, da ja schon der erste true liefert und somit das Oder bereits erfüllt ist. Bei dem einfachen Oder mit | würde trotzdem alles ausgewertet werden
 
VfL_Freak

VfL_Freak

Top Contributor
Moin,
if (c == ('a' | 'e' | 'i' | 'o' | 'u')) { istVokal = true; }
Vielleicht habt ihr ja schon switch kennengelernt (falls nicht, kommt das sicher bald ;))
Damit kannst Du dann solche Verschachtelungen auch übersichtlicher machen
Java:
boolean istVokal = false;
switch( c )
{
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        istVokal = true;
        break;

    default:
        istVokal = false;
        break;
}
Der default-case wäre hier streng genommen überflüssig, wenn vor dem switch die Variable mit false initialisiert wurde!
Das break im default-case ist streng genommen auch überflüssig!

Gruß Klaus
 
Thallius

Thallius

Top Contributor
Der gerade Strich | ist ein bitweises Oder. Durch 'a' | 'e' wird also das bitweise Oder auf die beiden Operanden 'a' und 'e' angewandt. Da beide Operanden nur Zahlen sind (ASCII), ist das Ergebnis auch wieder eine Zahl. Zum Schluss vergleichst du also eine Zahl c via == mit einer anderen Zahl.

Weiter als if (c == 'a' | c == 'e' | c == 'i') kannst du es nicht vereinfachen. Allerdings solltest du anstatt | besser || benutzen, dass ist ein Kurzschlussoperator. Angenommen c sei wirklich 'a', dann würde bei if(c=='a' || c=='e) der zweite Vergleich gar nicht ausgeführt werden, da ja schon der erste true liefert und somit das Oder bereits erfüllt ist. Bei dem einfachen Oder mit | würde trotzdem alles ausgewertet werden

Klar kann er das vereinfachen:

Code:
String[] vokals = {'a','e','i','o','u'};
if(Arrays.asList(vokals).contains(c+""))
...

ob es Sinn macht sei mal dahin gestellt.

Gruß

Claus
 
C

Capricornum

Mitglied
Hallo InfectedBytes,
danke für deine superschnelle Antwort.
Leider bin ich so neu bei dem Ganzen, dass ich nicht ganz mitkomme. Darf ich nochmal zusammenfassen?
"|" ist also ein bitweises oder, ok. Wenn ich also die richtige Schreibweise benutze, also (c == 'a' | c == 'e' | c == 'i'), dann vergleicht mein "ODER" Wahrheitswerte miteinander, stimmt das? Z.B. c == 'a' wird du false und c == 'e' zu true. Wenn ich aber die falsche Schreibweise benutze, also (c == ('a' | 'e' | 'i' | 'o' | 'u')), dann vergleicht mein "ODER" Zahlen, weil 'a' für sich stehend vom ASCII in eine Zahl übersetzt werde? Stimmt das so? Und warum ist dann am Schluss auch "c" eine Zahl? "c" ist ja das, was ich im JOptionPane eingebe. Wird dieser Buchstabe dann sozusagen auch in eine Zahl übersetzt? Wenn ich aber zum Schluss eine Zahl "c" mit einer Zahl" 'a' | 'e'... vergleiche, dann kann das doch genauso gut funktionieren. Ich tippe im JOptionPane z.B. "a" ein. Das wird übersetzt zu irgendeiner Zahl. Die wird dann verglichen mit der Zahl 'a' die im If Statement steht. Das Resultat wäre true und es müsste funktionieren.
:) Wie du siehst, ich kenne mich nicht aus.

PS: Danke Klaus, das ist tatsächlich das nächste Kapitel :)
 
C

Capricornum

Mitglied
Und warum funktioniert der Vergleich dann nicht?
aus if ( c == ('a' | 'e')) wird dann doch (wenn ich zum Beispiel den Buchstaben a eintippe:
if (97 == (97 | 101)) und das stimmt ja.
 
Thallius

Thallius

Top Contributor
Nein das tut es nicht. Lies Dir doch einfach mal was durch zur bitweisen Verknüpfung. Dann wirst du es verstehen.
 
C

Capricornum

Mitglied
Aha ok, ich habe mir was durchgelesen. Also mein Bitweiser Operator "|" macht aus dem Ausdruck ('a' | 'b') also (97 | 101) ein komplett neues Bit, das dann mit meinem char c verglichen wird und deswegen nicht zusammenpasst. Hab ich das so richtig verstanden?
 
X

Xyz1

Gast
Profis machen eigentlich eine binäre Suche, auf einem bereits vorsortierten Array/List. Aber:
Dazu benutzen wir "if Statements":

And:
Ich hoffe das macht Sinn. Könnt ihr mir erklären, warum mein letzter Versuch nicht mehr funktioniert?

Weil du dich nicht hardcore mit Bit operations auseinander gesetzt hast.

| ist bitweiser Operator oder kurzschließender boolescher Operator, da die Operanden aber sind...

Damit du im letzten Versuch nicht scheiterst, benötigst du eine Lerngruppe. Die gibt's nicht, das weiß ich selber.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Profis machen eigentlich eine binäre Suche,
auf einem bereits vorsortierten Array/List.

Ernsthaft, für 5 Elemente eine binäre Suche?



Damit du im letzten Versuch nicht scheiterst, benötigst du eine Lerngruppe. Die gibt's nicht, das weiß ich selber.

Du solltest erst mal den Rest des Threads lesen:

Ach so ja. Alles klar. Dann habe ich es jetzt glaube ich verstanden.
Vielen Dank euch!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Mein Plugin funktioniert nicht? Java Basics - Anfänger-Themen 10
G Mein Java Projekt funktioniert nicht Java Basics - Anfänger-Themen 5
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
W Warum funktioniert mein Programm nicht ? Java Basics - Anfänger-Themen 12
W Warum funktioniert mein Programm nicht ? Java Basics - Anfänger-Themen 6
W Erste Schritte Warum funktioniert mein Programm nicht ? ~if Anweisung~ Java Basics - Anfänger-Themen 4
A Mein 1x1 Programm funktioniert nicht? Java Basics - Anfänger-Themen 2
G Warum funktioniert mein Updater nicht? Java Basics - Anfänger-Themen 2
G Mein erster Thread funktioniert nicht. Java Basics - Anfänger-Themen 3
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
T % funktioniert nicht Java Basics - Anfänger-Themen 2
D e(fx)clipse installieren funktioniert nicht Java Basics - Anfänger-Themen 3
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
L hilfe run button funktioniert nicht Java Basics - Anfänger-Themen 13
I Array funktioniert nicht. Java Basics - Anfänger-Themen 2
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
G Programm mit Schleife funktioniert nicht Java Basics - Anfänger-Themen 5
T Redirect funktioniert nicht Java Basics - Anfänger-Themen 3
J Zufallszahl funktioniert nicht Java Basics - Anfänger-Themen 27
D Klassen add Methode funktioniert nicht. Java Basics - Anfänger-Themen 31
J ImagaIO funktioniert nicht unter Ubuntu Java Basics - Anfänger-Themen 23
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
P Zeichenkette Zeichen ausschlißen funktioniert nicht richtig Java Basics - Anfänger-Themen 9
F Primzahlsuche Schleife funktioniert nicht, HILFE! Java Basics - Anfänger-Themen 8
M Methoden Arrays.deepequals() funktioniert nicht Java Basics - Anfänger-Themen 2
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
F Input/Output die eine txt-Datei funktioniert die andere nicht Java Basics - Anfänger-Themen 8
UnknownInnocent Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
A TicTacToe funktioniert bis auf "schiefer" Sieg Java Basics - Anfänger-Themen 6
M Erste Schritte Importieren funktioniert nicht Java Basics - Anfänger-Themen 7
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
F FileCreation - PrintWriter funktioniert nicht... Java Basics - Anfänger-Themen 1
I Collections.shuffle funktioniert nicht Java Basics - Anfänger-Themen 1
T Methode in Klasse funktioniert nicht Java Basics - Anfänger-Themen 14
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
M Frage, wie dieser Code funktioniert, bzw. weshab er bei mir nicht funktioniert Java Basics - Anfänger-Themen 4
L Level Reset funktioniert nicht Java Basics - Anfänger-Themen 3
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
B OOP Objekt in IF erzeugen - funktioniert nicht so richtig Java Basics - Anfänger-Themen 11
W Warum funktioniert meine if Anweisung nicht? Java Basics - Anfänger-Themen 8
J Stringvergleich funktioniert nicht Java Basics - Anfänger-Themen 8
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
S Backspace Abfrage funktioniert nicht Java Basics - Anfänger-Themen 4
V Inkrement funktioniert nicht Java Basics - Anfänger-Themen 2
V Inkrement funktioniert nicht Java Basics - Anfänger-Themen 1
L Schleife funktioniert nicht richtig Java Basics - Anfänger-Themen 12
R Variablen MouseListener funktioniert auf anderen Pcs nur bedingt Java Basics - Anfänger-Themen 6
X Java 64 bit Funktioniert nicht Java Basics - Anfänger-Themen 7
ChrisPL4Y Wieso funktioniert dieses Programm nicht? Java Basics - Anfänger-Themen 6
S Repaint() in der Schleife funktioniert nicht immer Java Basics - Anfänger-Themen 5
N relativer Dateipfad funktioniert nicht Java Basics - Anfänger-Themen 6
N Input/Output System.in funktioniert nicht Java Basics - Anfänger-Themen 4
M Iterator funktioniert nicht Java Basics - Anfänger-Themen 5
G MouseListener funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
J copyURLToFile funktioniert nicht :-( Java Basics - Anfänger-Themen 14
T Programm Funktioniert nicht Java Basics - Anfänger-Themen 2
JavaNewbie2.0 GUI Funktioniert nicht Java Basics - Anfänger-Themen 18
T Java Executable jar file funktioniert nicht Java Basics - Anfänger-Themen 4
S nio move() funktioniert nicht richtig Java Basics - Anfänger-Themen 2
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
M In Netbeans Programm so abspeichern dass es funktioniert Java Basics - Anfänger-Themen 8
C Klasse funktioniert nicht Java Basics - Anfänger-Themen 2
N Timer funktioniert nicht beim starten Java Basics - Anfänger-Themen 3
G Warum funktioniert das Programm für negative Eingabe nicht? Java Basics - Anfänger-Themen 3
G Wie funktioniert das? > Schiffe versenken Java Basics - Anfänger-Themen 13
V For Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
S Methoden Methode funktioniert nicht | NullPointerException Java Basics - Anfänger-Themen 6
S Prüfen ob Zelle in Excel leer ist funktioniert nicht (Apache POI) Java Basics - Anfänger-Themen 18
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
A While-Schleife funktioniert nicht! Java Basics - Anfänger-Themen 33
S Primzahlen berechnen funktioniert nicht richtig Java Basics - Anfänger-Themen 1
P Java-Code funktioniert nicht Java Basics - Anfänger-Themen 13
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
snipesss Java-Code gedownloaded, funktioniert aber nicht? Java Basics - Anfänger-Themen 9
R If anwendung funktioniert nicht Java Basics - Anfänger-Themen 3
N JList + DefaultListModel + JScrollPane --> ensureIndexIsVisible funktioniert nicht immer Java Basics - Anfänger-Themen 1
Syncopated Pandemonium Verketten von Strings funktioniert nicht Java Basics - Anfänger-Themen 4
K Verlgeichsoperator in If funktioniert nicht? Java Basics - Anfänger-Themen 15
T Methoden Nach der Schleife funktioniert nichts mehr Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben