Ich versuche einen Taschenrechner mit Java zu programmieren, warum wiederholt sich die do-while-Schleife nicht, wenn.....?
man eine ungülgite Rechenoperation auswählt?
Stattdessen springt er aus der Schleife und macht mit der nächsten Ausgabe weiter.
Scanner s = new Scanner (System.in);
System.out.println("Hallo, dies ist ein Taschenrechner.\nWähle eine Rechenoperation aus. Zur Auswhl stehen: +,-,/,"); String Eingabe = s.next(); boolean bool; do { if (Eingabe.equals("+")) { System.out.println("Eingabe bestätigt."); bool=true;} else if(Eingabe.equals("-")) { System.out.println("Eingabe bestätigt."); bool=true;} else if(Eingabe.equals("/")) { System.out.println("Eingabe bestätigt."); bool=true;} else if(Eingabe.equals("")) {
System.out.println("Eingabe bestätigt.");
bool=true;}
else {System.out.println("Eingabe nicht verstanden. Bitte wähle eine gültige Rechenoperation aus.");
bool=false;
Eingabe = s.next();
}
}while(bool = false);
System.out.println("Nun gib zwei Zahlen ein, mit denen gerechnet werden soll");
Hier nochmal als Bild
https://www2.pic-upload.de/img/35478781/Unbenannt.png
4 Antworten
Typischer Flüchtigkeitsfehler. Das while(bool = false) muss natürlich while (bool == false) heißen, sonst weist du der Variable nur den Wert zu, anstatt den Wert abzufragen. Mir passiert das aber auch recht häufig. Vorallem, weil ich auch viel in anderen Programmiersprachen unterwegs bin, in denen es mit einem einzelnen Gleich-Zeichen richtig wäre.
Ob da noch mehr im Argen ist kann ich nicht sagen, aber es fällt auf, das deine "else"- Zweige nicht in Klammern sind, ansonsten wie daCyper sagt der bool-Vergleich, wobei ich (!bool) bevorzugen und bool als Namen nicht verwenden würde, da die eine "Sprachvokabel" ist , lieber vor der Schleife bool eingabe = false; und dann while(eingabe)
while(bool = false);
du möchtest eine Abfrage machen ob "bool" gleich "false" ist. Dies geschieht in Java mit "==", du hast stattdessen eine Zuweisung gemacht.
die Zeile müsste so hier aussehen:
while(!bool);
bzw.
while(bool == false)
-> macht in beiden fällen das Selbe
Das Ausrufezeichen negiert hierbei den Wert.
Hmm ich habe das gerade mal durchdebuggt:
Nein, die do-while-Schleife wird bei der Zuweisung abgebrochen.
Deine Aussage scheint also nicht zu stimmen.
Kommt dann wohl auf den Compiler an. Ich habe schon mit einigen gearbeitet, die eine Zuweisung als gültigen Ausdruck erkennen und dadurch eine fälschliche Zuweisung statt Gleichsetzung als "true" auswerten.
1.) Solltest du bool sicherheitshalber initialisieren.
2.) Könnte ich mir vorstellen, dass der Eingabestream anfangs nicht leer ist... gib Mal Eingabe aus und schau, was darin enthalten ist...
Kann es nicht, wenn die Bedingung eigentlich eine Zuweisung ist ;)
Komisch...
Du hast recht...
Und trotzdem funktioniert es bei mir...
Vielleicht ist Bluej einfach idiotensicher und korrigiert das automatisch...
Haha, das wäre aber keine gute Software zum lernen. Gerade solche "kleinen" Fehler sind am Anfang die häufigsten. Wenn man nie darauf hingewiesen wird, kommt man später wohl etwas ins straucheln^^
Hab das gearde gegoogelt und laut der Docuumentation scheiont Bluej das tatsächlich zu tun...
Meh, ich bin ein wenig geteilter Meinung ob das "gut" oder "schlecht" ist.
Eher schlecht, denn BlueJ wird hauptsächlich von Schulen verwendet...
Außerdem wird der Code nicht korrigiert sondern lediglich anders interpretiert, was dann zu Problemen führen kann, wenn man einen anderen Compiler verwendet...
Oh, ich dachte, dass die IDE das wenigsten richtig stellt. Stattdessen werden hier aktiv Fehler "unterschlagen". Das ist leider keine gute Arbeitsweise für eine "Lern"-Software :/
Naja, aber wieder was gelernt ^^
BlueJ == böse!
Ich weiß aber nicht, ob das bei einer neueren Version auch noch so ist...
Aber das ist sowieso egal, denn die neuere Version schmiert aufgrund der GUI immer ab...
... und da Zuweisungen vom Compiler als korrektes Statement erkannt werden, erhälst du hier immer "true".