2016-09-29 63 views
-7

所以我寫了這個程序,但由於某種原因,我的else語句不起作用。 如果我輸入「e」例如我的程序會簡單地崩潰......當它實際上應該返回「無效輸入」 有人可以幫我嗎?程序將無法正常運行

============================================== ===========================

import java.util.Scanner; 

public class AbsValue2 { 
    public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    System.out.println("Enter a number:"); 
    String num = input.nextLine(); 
    Double num2 = new Double(Double.parseDouble(num)); 
    Double abs_val = new Double(Math.sqrt(num2 * num2)); 

    if (num.matches("[+-]?[\\d]+[.]*")) 
    System.out.println("The absolute value of " + num + " is |" + abs_val + "|"); 
    else if (num.matches("[+-]?[\\d]*.[\\d]+")) 
    System.out.println("The absolute value of " + num + " is |" + abs_val + "|"); 
    else 
    System.out.println("Invalid input"); 

    } 
} 
+0

你正試圖解析它,然後檢查它是否有效。 – khelwood

+0

簡單的解決方法是在try和catch中打包,並在你的catch輸出無效輸入! – ApolloSoftware

回答

2

的問題是在這裏:

Double num2 = new Double(Double.parseDouble(num)); 

如果num「 e「,那麼你將得到一個NumberFormatException

您可以使用Scanner.hasNextDouble{}來檢查或嘗試/捕獲該異常。

0

您的代碼拋出NumberFormatException之前的,如果達到語句,因爲這行:

Double num2 = new Double(Double.parseDouble(num)); 

您需要之前檢查的有效性解析它。