2017-08-25 2 views
0

Ich schreibe eine Methode, die eine Zeichenkette möglichst in einen int konvertieren soll und eine Ausnahme auslöst, die mit einer Nachricht nicht möglich ist. Es wirft die Ausnahme aber nicht die Nachricht drucken, dh es wirkt gleich wie es mir würde ist die Ausnahmebedingung auszukommen:Warum druckt diese Methode die Nachricht nicht im Ausnahmeparameter?

private static int throwsMethod() throws NumberFormatException{ 
    Scanner s = new Scanner(System.in); 

    System.out.println("enter a number"); 
    String intNumber = s.next(); 

    Integer wrapperIntNumberConv = Integer.parseInt(intNumber); 

    if(!(wrapperIntNumberConv instanceof Integer)){ 
     throw new NumberFormatException("can't make an int"); 
    } 

    int fullConvertedNumber = (int) wrapperIntNumberConv; 
    System.out.println(fullConvertedNumber); 
    return fullConvertedNumber; 
} 

wie kann ich es tun, ohne einen try/catch-Block (I‘ m versuchen, Ausnahmen zu lernen und in dieser Übung, ohne einen Versuch/catch-Block) und es bekommen, um die Nachricht zu zeigen?

edit: der Grund, die vorgeschlagene Antwort, hätte setzen Azro in nicht mein Problem lösen ist, weil nichts ein Verfahren mit einem wirft someException() im Kopf

+0

Mögliches Duplikat [Java Ausnahmen werfen - Umgang mit Ausnahmen ohne try catch ] (https://stackoverflow.com/questions/6243887/java-exceptions-handling-exceptions-without-try-catch) – nullpointer

+0

Es gibt keine Möglichkeit für 'wrapperIntNumberConv', keine' Integer' zu sein, außer es enthält 'null' was es nicht kann. –

+0

könnte es "3D" oder etwas sein – Derry

Antwort

3

Die Ausnahme addreses wahrscheinlich an dieser Linie geworfen wird:

Integer wrapperIntNumberConv = Integer.parseInt(intNumber); 

Weil parseInt selbst wirft es, wenn die Zeichenfolge keine parsable ganze Zahl enthält. (Documentation)

So erreicht das Programm in diesem Fall nicht Ihre if.

Sie müssen die Zeile mit parseInt in einem Try-Catch-Block wickeln zu können, eine Ausnahme mit Ihrer Nachricht werfen:

String intNumber = s.next(); 
try { 
    return Integer.parseInt(intNumber); 
catch(NumberFormatException e) { // catch system's exception 
    // throw new one with your message 
    throw new NumberFormatException("can't make an int"); 
} 

Oder können Sie überprüfen, ob die Zeichenfolge, die eine Zahl (optional Zeichen enthalten und Ziffern), bevor parseInt Aufruf:

String intNumber = s.next(); 
if (intNumber.matches("-?\\d+")) { // see: regular expressions 
    return Integer.parseInt(intNumber); 
} else { 
    throw new NumberFormatException("can't make an int"); 
} 
+0

wie würde der Versuch/Fang aussehen? – Derry

+0

@Derry Ich habe es jetzt zu meiner Antwort hinzugefügt. – juzraai

-1

ich bin nicht sicher, verstehen, was Sie wollen: wenn der Number geworfen wird, kann sie nicht erreichen die Druckanweisungen

int fullConvertedNumber = (int) wrapperIntNumberConv; 
System.out.println(fullConvertedNumber); 
return fullConvertedNumber; 

so keine Nachricht gedruckt wird.

Wenn Sie die Meldung „nicht einen int machen“ drucken möchten, können Sie es drucken, bevor die Ausnahme oder in der Anrufer Methode über try-catch

Verwandte Themen