我正在尝试制作一个计算器,可以接收一个数字,也可以进行计算(f.ex 2 + 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时,它会因为有一个字符而崩溃。有人有什么好主意吗?
答案 0 :(得分:0)
Double.valueOf()
只是一个解析器,它知道翻译包含double的有效表示的字符串。它不是一个懂得评估数学表达的翻译。
要做到这一点,您可以自己实现这样的解释器,也可以从java调用JavaScript。您可以在此处找到示例:Is there an eval() function in Java?
答案 1 :(得分:0)
如果您想使用Java API执行所有操作,可以执行以下操作。
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);
}
要使它适用于所有情况需要做很多工作(以上只是检查它是否是添加的一种糟糕的硬编码方式),但它可以工作。
有关操作/解析字符串的不同方法,请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/String.html。
答案 2 :(得分:-1)
你不能直接这样做,因为它是一个字符串格式,你可以使用脚本引擎,或者你可以使用分流码算法转换为后缀,然后评估。 脚本引擎语法是
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine eng = manager.getEngineByName("JavaScript");
String foo = "50+2";
System.out.println(eng.eval(foo));