Java 让计算器检查数据类型并输出消息?

Java 让计算器检查数据类型并输出消息?,java,calculator,Java,Calculator,我对Java真的很陌生,我正在尝试制作一个基本的计算器,我已经设法让它工作起来,并根据我的需要生成一个双精度计算器。我的问题是,如果用户输入了错误的数据类型,例如字符串,我希望它提供一条错误消息 package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { double n1, n2; String n3; Sca

我对Java真的很陌生,我正在尝试制作一个基本的计算器,我已经设法让它工作起来,并根据我的需要生成一个双精度计算器。我的问题是,如果用户输入了错误的数据类型,例如字符串,我希望它提供一条错误消息

package com.company;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    double n1, n2;
    String n3;
    Scanner inp = new Scanner(System.in);


    System.out.print("Enter first value: ");
    String inp1 = inp.nextLine();
    n1 = Double.parseDouble(inp1);


    System.out.print("Enter Second Value: ");
    String inp2 = inp.nextLine();
    n2 = Double.parseDouble(inp2);


    System.out.print("Enter Operation: ");
    String inp3 = inp.nextLine();

    switch (inp3) {

        case "+":
            System.out.println("The result is: " + (n1 + n2));
            break;
        case "-":
            System.out.println("The result is: " + (n1 - n2));
            break;
        case "*":
            System.out.println("The result is: " + (n1 * n2));
            break;
        case "/":
            System.out.println("The result is: " + (n1/n2));
            break;
        default:
            System.out.println("Invalid Operation! \nPlease use '-,+,*,/' ");

    }

}

}
这是我目前的代码,我愿意接受任何建设性的批评来改进我的代码。我似乎想不出一个办法来解决我的问题! 感谢您的帮助:)

抛出
NumberFormatException

抛出以指示应用程序已尝试将字符串转换为其中一种数字类型,但该字符串没有适当的格式

所以只需围绕每个
n1=Double.parseDouble(inp1)使用
尝试catch
并在
catch
块中打印错误消息。

使用异常

这样做,

System.out.print("Enter first value: ");
String inp1 = inp.nextLine();
try{
    n1 = Double.parseDouble(inp1);
}
catch(NumberFormatException exc){
    System.err.println("The input was not a valid double");
}

parseDouble()
无法将给定字符串解析为双精度时,将抛出
NumberFormatException
。上面的代码检查此异常是否在
try
块中抛出,并“catch”它,并在
catch
块中处理该异常。更多关于这个

了解有关异常的更多信息

  • 不要使用变量名,如n1、n2、n3等。在较大的项目中,这会使您感到困惑
  • 论双重用法的句法分析

    try{
        n2 = Double.parseDouble(inp2);
    } catch(NumberFormatException numberFormatException){
        System.out.println("Wrong number format of input: "+inp2+". Exception:" +numberFormatException.getMessage());
        return;
    }
    
  • 如果您不想使用异常来检查输入字符串是否为数字格式,您可以始终使用一些lib,比如apachecommons。在本例中,代码如下所示

    if (StringUtils.isNumeric(inp2)) {
        n2 = Double.parseDouble(inp2);
    } else {
        System.out.println("Wrong number format of input: " + inp2);
        return;
    }
    

  • 此处的更多信息:

    为了简单起见,您可以使用一种方法,在获得正确的输入之前不断请求输入,例如:

    public double askForDouble(Scanner input){
      while(true){ 
       System.out.println("enter a good double:" ) ;
       try{
         return Double.parseDouble(input.nextLine());
       }catch(Exception e){
        System.out.println("not a good double try again...");
    
       }
      }
    }
    
    然后在主方法中,您可以替换

    String inp1 = inp.nextLine();
    n1 = Double.parseDouble(inp1);
    

    同样的程序也适用于您的数学运算(例如+,-) 太

    该方法可能引发以下异常:

  • NullPointerException-如果字符串为null
  • NumberFormatException-如果字符串不包含可解析双精度
  • 您可能需要在代码中加入try/catch,如:

    try {
          String inp1 = inp.nextLine();
          if(null != inp1 ) {
             n1 = Double.parseDouble(inp1);
          }
    } catch (NumberFormatException e) {
        // Handle NFE.
    }
    

    我认为您希望在输入错误后处理异常。我看到您将
    String
    输入解析为double,在这种情况下,应该从该解析方法中缓存
    NumberFormatException
    。您可以从那里处理用户输入错误的
    字符串的情况


    或者您使用
    inp.nextDouble()
    从控制台读取数字,在这种情况下,可能会出现
    inputmaschException
    ,您可以处理此异常。

    您当前的问题是没有显示错误消息?如果用户输入错误的数字,您可以使用try-catch块向用户发送消息。在您的情况下,在解析数字时
    n1 = askForDouble(inp);
    
    try {
          String inp1 = inp.nextLine();
          if(null != inp1 ) {
             n1 = Double.parseDouble(inp1);
          }
    } catch (NumberFormatException e) {
        // Handle NFE.
    }