Gibt es eine Möglichkeit, die Nummer (Reihenfolge) von NumberFormatException
zu behandeln? Ich machte einen Taschenrechner mit Double
Operand [], und wie unten möchte ich schreiben, wenn Fehler aufgetreten ist. Wenn ich die Eingabe "2 + k", die Meldung, dass "Operand [1] hat die falsche Eingabe." sollte herauskommen. Wie soll ich das machen?Wie sollte ich mit NumberFormatException in Java umgehen?
Antwort
Zuerst ersetzen Sie die Zeile
System.out.println("operand[] has the wrong input.");
mit der Linie
System.out.println(e.getMessage());
Jetzt können Sie eine Nachricht übergeben, wenn Sie die Ausnahme in der MyCalculator.calculate()
Methode werfen den NumberFormatException(String)
Konstruktor. Es würde wie folgt aussehen:
calculate(String expression)
{
//validate input code
//...
//if operand 0 not valid
throw new NumberFormatException("operand 0 has the wrong input");
//if operand 1 not valid
throw new NumberFormatException("operand 1 has the wrong input");
//rest of calculate method
}
Vielleicht haben Sie eine neue Ausnahme definieren können. B. CalculatorException
, die genauere Informationen über Berechnungen enthalten könnten, z. B. welcher Operand falsch ist. Oder Sie könnten sogar eine weitere Ausnahme wie IllegalOperandException
definieren, die CalculatorException
erweitern könnte. Und dann könnte Ihre Methode calculate
deklariert werden, um eine CalculatorException
zu werfen. Zusammenfassend besteht die Idee darin, eine neue Hierarchie von Ausnahmen zu definieren, um Informationen zu geben, die sich mehr auf die Domäne Ihres Problems beziehen.
Und dann könnte Ihr Code sein, so:
try {
System.out.println("result: " + MyCalculator.calculate(expression));
System.out.println();
} catch(CalculatorException e) {
System.out.println(e.getMessage());
}
Möglicherweise möchten Sie bestätigen, dass die Eingabe, bevor er es auf Ihren Rechner numerisch ist. Wenn Sie auf SO nach etwas suchen, wie z. B. prüfen, ob eine Zeichenfolge numerisch ist, finden Sie viele Beispiele. –
Offenbar wandelt die 'calculate()' Methode die Operanden in Doppel? Es kann möglich sein, die Ausnahmen dort separat abzufangen und sie mit der gewünschten expliziten Nachricht zu wiederholen. Wie 'throw new NumberFormatException (String.format (" operand [% d] hat die falsche Eingabe. ", OperandIndex));'. Dann können Sie hier einfach die 'NumberFormatException' abfangen und ihre Nachricht ausdrucken. Wie Pauls Antwort, aber ohne die Eingabe selbst zu bestätigen. Stopf sie einfach in ein "double" und fang/wiederhole die Ausnahme. – Arjan