Im vorherigen Schritt haben wir die NumberFormatException
erfolgreich mit einem try-catch
-Block behandelt. Dies verhindert, dass unser Programm abstürzt, wenn die Eingabe keine gültige Zahl ist. Allerdings versucht der aktuelle Ansatz immer noch, die Zeichenkette zu parsen und fängt den Fehler erst nach dem fehlgeschlagenen Parsing ab.
Ein proaktiverer Ansatz besteht darin, zu prüfen, ob die Eingabezeichenkette ein gültiges Dezimalformat hat, bevor man versucht, sie zu parsen. Dies kann mit regulären Ausdrücken oder anderen Validierungstechniken erfolgen. In diesem Lab werden wir eine einfache Prüfung innerhalb einer Schleife verwenden, um den Benutzer wiederholt zur Eingabe aufzufordern, bis eine gültige Dezimalzahl angegeben wird.
Dieser Ansatz kombiniert den try-catch
-Block mit einer Schleife, um sicherzustellen, dass wir eine gültige Eingabe erhalten.
-
Öffnen Sie die Datei HelloJava.java
im WebIDE-Editor.
-
Ändern Sie den Code, um eine Schleife einzufügen, die so lange fortgesetzt wird, bis eine gültige Eingabe erhalten wird:
import java.util.Scanner;
public class HelloJava {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double number = 0.0; // Initialize with a default value
boolean validInput = false; // Flag to track valid input
while (!validInput) {
System.out.print("Enter a decimal number: ");
String userInput = scanner.nextLine();
try {
// Attempt to parse the input string into a double
number = Double.parseDouble(userInput);
validInput = true; // Set flag to true if parsing is successful
} catch (NumberFormatException e) {
// This code runs if a NumberFormatException occurs
System.out.println("Invalid input. Please enter a valid decimal number.");
}
}
System.out.println("You entered a valid number: " + number);
scanner.close();
}
}
Schauen wir uns die Änderungen an:
double number = 0.0;
: Wir initialisieren die Variable number
außerhalb der Schleife.
boolean validInput = false;
: Wir führen eine boolesche Variable validInput
ein, um die Schleife zu steuern. Sie ist zunächst false
.
while (!validInput)
: Dies erstellt eine while
-Schleife, die so lange fortgesetzt wird, wie validInput
false
ist.
- Innerhalb des
try
-Blocks setzen wir validInput
auf true
, wenn Double.parseDouble()
erfolgreich ist. Dies führt dazu, dass die Schleife nach der aktuellen Iteration beendet wird.
- Wenn eine
NumberFormatException
auftritt, wird der catch
-Block ausgeführt, validInput
bleibt false
und die Schleife wird fortgesetzt, wobei der Benutzer erneut zur Eingabe aufgefordert wird.
- Nachdem die Schleife beendet ist (d.h.
validInput
ist true
), geben wir eine Meldung aus, die bestätigt, dass eine gültige Eingabe erhalten wurde.
-
Speichern Sie die Datei (Strg+S oder Cmd+S).
-
Kompilieren Sie das geänderte Programm:
javac HelloJava.java
-
Führen Sie das Programm aus:
java HelloJava
-
Versuchen Sie nun zunächst ungültige Eingaben einzugeben und geben Sie dann eine gültige Dezimalzahl ein.
Enter a decimal number: abc
Invalid input. Please enter a valid decimal number.
Enter a decimal number: 1.2.3
Invalid input. Please enter a valid decimal number.
Enter a decimal number: 789.01
You entered a valid number: 789.01
Das Programm wird so lange nach Eingaben fragen, bis Sie eine Zeichenkette angeben, die Double.parseDouble()
erfolgreich umwandeln kann.
Sie haben nun eine einfache Eingabevalidierungsschleife implementiert, die sicherstellt, dass Ihr Programm eine gültige Dezimalzahl vom Benutzer erhält, bevor es fortfährt. Dies ist ein grundlegendes Muster für die Verarbeitung von Benutzereingaben in vielen Anwendungen.