2016-09-29 95 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)); 

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