Was ich tun würde, ist String
Eingang bekommen, und analysieren sie entweder als Doppel- oder eine ganze Zahl ist.
String str = input.next();
int i = 0;
double d = 0d;
boolean isInt = false, isDouble = false;
try {
// If the below method call doesn't throw an exception, we know that it's a valid integer
i = Integer.parseInt(str);
isInt = true
}catch(NumberFormatException e){
try {
// It wasn't in the right format for an integer, so let's try parsing it as a double
d = Double.parseDouble(str);
isDouble = true;
}catch(NumberFormatException e){
// An error was thrown when parsing it as a double, so it's neither an int or double
System.out.println(str + " is neither an int or a double");
}
}
// isInt and isDouble now store whether or not the input was an int or a double
// Both will be false if it wasn't a valid int or double
Auf diese Weise können Sie sicherstellen, dass Sie durch ganzzahlige Genauigkeit verlieren nicht nur ein Doppelzimmer (Doppelzimmer haben einen anderen Bereich der möglichen Werte als ganze Zahlen) Parsen, und Sie können die Fälle, in denen weder eine gültige ganze Zahl Griff oder doppelt eingegeben wurde. Wenn der Code im Block try
eine Ausnahme auslöst, wird der Code im catch-Block ausgeführt. Wenn in unserem Fall eine Ausnahme durch die Methode parseInt()
ausgelöst wird, führen wir den Code im catch-Block aus, in dem sich der zweite try-Block befindet. Wenn eine Ausnahme von der Methode parseDouble()
ausgelöst wird, führen wir den Code innerhalb des zweiten catch-Blocks aus, der eine Fehlermeldung ausgibt.
In der Tat wäre das Lesen in einem 'String' am besten. Dann müssen Sie überprüfen, ob die angegebene Nummer eine Zahl ist. Wenn es einen Punkt oder ein Komma enthält und der linke und der rechte Teil numerisch sind, ist es ein "Doppel". Andernfalls, wenn kein Punkt oder Komma vorhanden ist, aber der Rest numerisch ist, ist es ein "int".Um zu überprüfen, ob es sich um ein Double handelt, können Sie [regex] (https://en.wikipedia.org/wiki/Regular_expression) verwenden: "-? \\ d + (\\. \\ d +)?", Für Zahlen Sie kann "[0-9] *" verwenden. – pietv8x
@ pietv8x Natürlich würde dieses Regex-Muster nur für eine begrenzte Anzahl von Gebietsschemas funktionieren, die Fließkommazahlen ähnlich der englischen formatieren. Und selbst in einem englischen Gebietsschema können Ganzzahldaten Gruppierungstrennzeichen usw. enthalten, die zu Fehlern führen können. – Hulk