繁体   English   中英

Java验证基本计算器程序中的输入

[英]Java Validating Input in a Basic Calculator Program

我正在寻找如何使程序正确运行的答案。 我希望我的程序能够识别双精度数以外的其他东西-例如,如果我将其放置在idk中,它会说, 这不是一个数字,而是崩溃了。

我的代码:

import java.util.*;

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

        FunctionMain action = new FunctionMain();

         Scanner input = new Scanner(System.in);

        double answer = 0;
        double inputNu1, inputNu2;
        char operator;
        boolean end = false;

     while (! end ) {
            System.out.print(">>>");

            inputNu1 = input.nextDouble();
            operator = input.next().charAt(0);
            inputNu2 = input.nextDouble();        

    switch (operator) 
            {
        case '-': answer = action.Subtract(inputNu1, inputNu2);
                break;
        case '*': answer = action.Multiply(inputNu1, inputNu2);
                break;
        case '+': answer = action.Add(inputNu1, inputNu2);
                break; 
        case '/': answer = action.Divide(inputNu1, inputNu2);
               break;          
            }

        System.out.println(answer);             
        }       
        input.close();

    }

}



public class FunctionMain {

     double Subtract (double Nu1 , double Nu2)
    {
         return Nu1 + Nu2;

    }
    double Multiply (double Nu1 , double Nu2)
    {
        return Nu1 * Nu2;
    }
    double Add (double Nu1 , double Nu2)

    {
        return Nu1  + Nu2;
    }
    double Divide (double Nu1 , double Nu2)

    {  
        return Nu1 / Nu2;
    }

}

当您尝试将String转换为Double时,会出现异常,因此必须按以下方式进行管理:

double n = 0.0;
try {
    n = input.nextDouble();
} catch (Exception e) {
    // there was an error, and here we can do whatever
    System.out.println( "It was not a number!" );
}

了解有关特权的更多信息: http : //docs.oracle.com/javase/tutorial/essential/exceptions/

就像是:

public static boolean isNumeric(String str)
{
  return str.matches("-?\\d+(\\.\\d+)?");  //match a number with optional '-' and decimal.
}

要么:

public static boolean isNumeric(String str)  
{  
  try  
  {  
    double d = Double.parseDouble(str);  
  }  
  catch(NumberFormatException nfe)  
  {  
    return false;  
  }  
  return true;  
}

检出: 如何检查Java中的字符串是否为数字

此处的主要思想是,当检索到的令牌与预期类型不匹配时,查找Scanner引发的异常。 如果在代码中输入了错误的输入,则会在控制台中看到java.util.InputMismatchException。 因此,我们可以仅使用try{....}catch(java.util.InputMismatchException e){....}来捕获此特定异常并添加一些用户定义的操作。

我编辑了CalculatorMain类 ,现在,如果您输入的输入无法解析为两倍,控制台将输出警告,并提示您再次输入新的输入。

**Sample console output:**
>>>jdk
java.util.InputMismatchException
jdk IS INVALID INPUT
>>>test
java.util.InputMismatchException
test IS INVALID INPUT
>>>input 10
*
789
7890.0
import java.util.*;
public class CalculatorMain {
public static void main(String[] args) {
    FunctionMain action = new FunctionMain();
    double answer = 0;
    double inputNu1, inputNu2;
    char operator;
    boolean end = false;
    Scanner input = new Scanner(System.in);
    while (! end ) {

        System.out.print(">>>");
        try{
            inputNu1 = input.nextDouble();
            operator = input.next().charAt(0);
            inputNu2 = input.nextDouble();   
            switch (operator){
            case '-': answer = action.Subtract(inputNu1, inputNu2);
                break;
            case '*': answer = action.Multiply(inputNu1, inputNu2);
                break;
            case '+': answer = action.Add(inputNu1, inputNu2);
                break; 
            case '/': answer = action.Divide(inputNu1, inputNu2);
                break;          
            }

            System.out.println(answer); 

        }catch(InputMismatchException e){
            System.out.println(e.toString());
            System.out.println(input.next() + " IS INVALID INPUT");
        }
    } 
    input.close();
    }
}

有关Java异常的更多信息- 捕获和处理异常以及类InputMismatchException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM