用Java中的Scanner方法进行计算

用Java中的Scanner方法进行计算,java,methods,input,Java,Methods,Input,我正在尝试制作一个计算器,它既可以接受一个数字,也可以接受一个计算(f.ex2+2)。甚至可以用扫描仪进行计算,或者你们中的一些人知道一种灵活的方法来进行计算吗 System.out.println("Write in a number or a calculation: "); Scanner a = new Scanner(System.in); String ab = a.nextLine(); Double abc = Double.valueOf(ab); 我希望这能起作用,但当它从

我正在尝试制作一个计算器,它既可以接受一个数字,也可以接受一个计算(f.ex2+2)。甚至可以用扫描仪进行计算,或者你们中的一些人知道一种灵活的方法来进行计算吗

System.out.println("Write in a number or a calculation: ");
Scanner a = new Scanner(System.in);
String ab = a.nextLine();
Double abc = Double.valueOf(ab);
我希望这能起作用,但当它从字符串转换为双精度时,由于存在字符,它崩溃了。。有人有什么好主意吗?

Double.valueOf()
只是一个解析器,它知道如何翻译包含Double有效表示形式的字符串。口译员不知道如何评价数学表达式


为此,您可以自己实现这样的解释器,也可以从java调用JavaScript。您可以在这里找到示例:

您不能直接这样做,因为它是字符串格式的,您可以使用脚本引擎,也可以使用调车场算法转换为后缀,然后进行计算。 脚本引擎语法为

  ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine eng = manager.getEngineByName("JavaScript");
    String foo = "50+2";
    System.out.println(eng.eval(foo));

如果您想用JavaAPI做任何事情,您可以这样做

System.out.println("Write in a number or a calculation: ");
Scanner a = new Scanner(System.in);
String ab = a.nextLine();
if(ab.contains("+")) {
    // parse the string
} else {
    Double abc = Double.valueOf(ab);
}
要使它在所有情况下都能工作,需要做大量的工作(以上只是检查它是否是加法的一种糟糕的硬编码方式),但它可以工作


有关操作/分析字符串的不同方法,请参阅。

是否有任何异常请阅读这一行。。在分析它之前,先看看它是否有一些像+,*等的操作。。如果是,则将其解析为计算,否则将其解析为数字。@praveen_mohan-NumberFormatException最有可能。。当您输入控制台的输入时,请仅输入数字,或者使用多个catch语句创建try并处理异常