Java - Scanner Eingabe nur positive Double Werte?

1 Antwort

Java - Scanner Eingabe nur positive Double Werte?

und warum machst du das nicht? Was du gerade - von der Logik machst:

  • Du wiederholst die Schleife, solange done eben nicht wahr ist
  • wenn der nächste Abschnitt im Scanner ein Double ist, dann setzt du done auf true und beendest die Schleife und nimmst dann - nach der Schleife, einen neuen Input? Und zwar eine komplette Zeile, ohne was zu tun?
  • Wenn der nächste Abschnitt kein Double ist, machst du eine entsprechende Ausgabe, dass eine Zahl eingegeben werden soll. Dann implizierst du, dass das nächste ein Double ist und speicherst das in einer Integer-Variable? Wenn die Zahl dann kleiner 0 ist, setzt du done auf falsch - unnötigerweise, da done ja laut der Logik immer false sein muss, wenn der Bereich ausgeführt wird. Dann nimmst du auch hier die nächste Zeile, ohne damit etwas zu tun?

Was du tun solltest:

  • Überprüfe, ob der nächste Abschnitt ein Double ist
  • Wenn ja, speichere diesen in einer Double-Variable
  • Überprüfe, ob Double postivi ist und beende dann die Schleife
  • Wenn nein, Wiederhole die Eingabe.

Beachte jedoch, dass hasNextDouble() auch die Eingabe 1 erkennen würde

Alternativ könntest du natürlich auch mit Regex arbeiten und den String überprüfen, der in der nächsten Zeile gespeichert ist.

verreisterNutzer  29.01.2022, 18:56

Erstmal vielen Dank für die ausführliche Erklärung. Ich habe es nun versucht... aber ich verstehe es einfach nicht. Könnte ich dich bitte darum bitten meinen Code zu berichtigen?

0
verreisterNutzer  29.01.2022, 19:34
@xxxcyberxxx

Ok ich denke ich habs. Zumindest macht der Code nun genau das, was ich will.

boolean fertig = false;

      while (!fertig) {

         if (scan.hasNextDouble()) {

            double zahl = scan.nextDouble();

            if (zahl >= 0) {

               gehalt.setGehalt(zahl);

               fertig = true;

            } else {

               System.out.println("*** Bitte geben Sie eine positive Zahl ein! ***");

               fertig = false;

            }

         } else {

            System.out.println("*** Bitte geben Sie eine positive Zahl ein! ***");

            fertig = false;

            scan.nextLine();

         }

      }

      scan.nextLine();

   }

0