2016-06-04 12 views
-1

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?

+0

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. –

+0

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

Antwort

0

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 
} 
0

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()); 
}