2017-08-25 102 views
0

我正在寫一個方法,它應該將字符串轉換爲一個int如果可能的話,它會拋出一個不可能的消息的例外。它拋出異常,但它不打印的消息,這意味着它的作用相同,因爲這將是我註釋掉異常情況:爲什麼這個方法不會在異常參數中打印消息?

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

我怎麼能做到這一點沒有一個try/catch塊(I」 m試圖學習異常,並在這個練習中,沒有try/catch塊)並讓它顯示消息?

編輯:之所以說azro投入並沒有解決我的問題的考試中,因爲什麼也沒有addreses頭中具有

+0

[Java異常的可能的複製 - 處理異常沒有嘗試捕捉](https://stackoverflow.com/questions/6243887/java-exceptions-handling-exceptions-without-try-catch) – nullpointer

+0

'wrapperIntNumberConv'不能成爲'Integer',除非它包含'null'它不能。 –

+0

它可能是「3D」或什麼 – Derry

回答

3

唯一的例外是在這條線可能拋出拋出someException()的方法:

Integer wrapperIntNumberConv = Integer.parseInt(intNumber); 

因爲parseInt本身拋出,如果該字符串不包含一個可分析的整數。 (Documentation

所以在這種情況下程序沒有達到if

你需要用線與parseInt一個try-catch塊是能夠引發你的消息的異常:

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

或者,您可以檢查是否字符串包含一個數字(可選符號和數字),呼籲parseInt前:

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

try/catch看起來像什麼? – Derry

+0

@Derry我已經將它添加到我的答案了。 – juzraai

-1

我不知道理解你想要什麼:如果拋出NumberFormatException,不能達到打印指令

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

因此沒有消息打印。

如果您想要打印的「不能讓一個int」的消息,您可以通過的try-catch拋出異常或來電方法之前打印

相關問題