Java - Scanner Eingabe nur positive Double Werte?
Hallo.
Ich will kontrollieren, ob die Scanner Eingabe ein positiver Double ist.
Ich will ebenfalls das ganze so lange loopen, bis die Richtige Eingabe getätigt wirde.
Hier ist mein Code:
boolean done = false;
while (!done) {
if (scan.hasNextDouble()) {
done = true;
} else {
System.out.println("*** Please give in a numeric value ***");
int number = scan.nextDouble();
if(number < 0){
done = false;
scan.nextLine();
}
}
}
scan.nextLine();
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.
Nein, ich werde den Code nicht ausprogrammieren. Du musst es können
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();
}
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?