1

我想以更具體的方式處理NumberFormatException。發生 此異常,當它試圖分配什麼,但一個整數,輸入以下時:如何以更具體的方式處理NumberFormatException?

  1. 字符
  2. 空輸入
  3. 雙號

根據什麼被輸入我想顯示一個適當的消息,如

你輸入的字符串,請輸入整數

值不能爲空,請輸入一個整數值

下面的代碼捕獲NumberFormatException一般辦法。

我不知道是否有辦法包含更多的catch子句。

import java.util.Scanner; 

    public class TestException { 

     static int input; 
     static Scanner scan = new Scanner(System.in); 

     public static void main(String[] args) { 
      System.out.println("Enter an integer number: "); 

      try { 
       input = Integer.parseInt(scan.next()); 
       System.out.println("You've entered number: " + input); 
      } catch (NumberFormatException e) { 
       System.out.println("You've entered non-integer number"); 
       System.out.println("This caused " + e); 
      } 
     } 
    } 
+0

類似的線就顯示「你已進入空白或非數字值,請再試一次「??這是更好的嗎? –

+1

您可以分析catch子句中的給定輸入,顯然沒有內置邏輯來確定各種任意原因爲什麼字符串作爲數字無效 – Esailija

+0

也終止帶有錯誤代碼的進程。 System.exit(1); –

回答

2

您對使用if-else結構來catch塊內指定scenerios。

請參見下面的代碼:

String inString = null; 
try 
{ 
    iString = scan.next().trim(); 
    input = Integer.parseInt(inString); 
    System.out.println("You've entered number: " + input); 
} 
catch (NumberFormatException e) 
{ 
    if(inString.equals("") 
    { 
     System.out.println("You've entered empty string."); 
    } 
    else if(inString.length() == 1) 
    { 
     System.out.println("You've entered a single char"); 
    } 
    else 
    { 
     System.out.println("You've entered non-intereger number"); 
    } 
    System.out.println("This caused " + e); 
} 
+0

我正在使用Eclipse。當我按Enter時,這是一個空字符串,但是你的代碼不檢查第一個條件,所以它進入最後的「其他」條件 – Askar

3

首先從用戶獲取用戶輸入後,嘗試將其轉換爲整數。

static int input; 
    static Scanner scan = new Scanner(System.in); 

    public static void main(String[] args) { 
     System.out.println("Enter an integer number: "); 

     String inputString = scan.next(); 

     try { 
      input = Integer.parseInt(); 
      System.out.println("You've entered number: " + input); 
     } catch (NumberFormatException e) { 
      if(inputString.equals("") || inputString == null) { 
       System.out.println("empty input"); 
      } else if(inputString.length == 1) { 
       System.out.println("char input"); 
      } else { 
       System.out.println("string input"); 
      } 
     } 
    } 
0

你可以做輸入一些測試,如果解析輸入一個整數值出現異常,這樣的事情:

String scanned = null 
try { 
    scanned = scan.next(); 
    input = Integer.parseInt(scanned); 
    System.out.println("You've entered number: " + input); 
} catch (NumberFormatException e) { 
    if (scanned == null || scanned.isEmpty()) { 
     System.out.println("You didn't enter any value"); 
    } else if (scanned.length() == 1) 
     System.out.println("You entered a single char which is not a number"); 
    } 
    // and more tests, you can even try to parse as Double 
} 
+0

scanned.size() - > scanned.length() – Askar

0
String aString = null; 
    aString = scan.next().trim(); 
    System.out.println("You've entered number: " + aString); 
    if("".equals(aString.trim())){ 
     System.out.println("You have entered an Empty String"); 
    }else if(!isNumber(aString) && aString.length()==1){ 
     System.out.println("You have entered a Character"); 
    }else if(!isNumber(aString) && aString.length()>1){ 
     System.out.println("You have entered a String"); 
    }else if(isNumber(aString)){ 
     int input = Integer.parseInt(aString.replaceAll(",","")); 
     System.out.println("You have entered a correct Number"+input); 
    } 

    private boolean isNumber(String s){ 
     return s.matches("[0-9]+(,[0-9]+)*,?"); 
    } 
+0

這會拋出一個'NumberFormatException'而不捕獲它,從而結束程序(並且編號正則表達式也不正確)。 – jlordo

+0

現在,這不會引發任何數字格式異常。 – ANIL

+0

不,它不會因爲您不再將輸入轉換爲「int」,這是OP想要做的。正則表達式仍然是錯誤的。 – jlordo

相關問題