我有一个带有数学运算符的字符串,我需要将其转换为int
(答案)。
下面的代码不起作用,但我不确定如何使 answer 变量起作用。
String question;
int answer;
question = "7/7+9-9*5/5";
answer = Integer.parseInt(question);
我有一个带有数学运算符的字符串,我需要将其转换为int
(答案)。
下面的代码不起作用,但我不确定如何使 answer 变量起作用。
String question;
int answer;
question = "7/7+9-9*5/5";
answer = Integer.parseInt(question);
Integer.parseInt(question);
……要是这么简单就好了……
您有一个"7/7+9-9*5/5"
中缀表示法的数学表达式,您想对其进行评估并将结果打印给用户。这样做的方法是使用Shunting-yard 算法将其转换为后缀表示法,也称为反向波兰表示法。将表达式转换为后缀评估后,使用此算法非常容易
从 1.6 Java 开始嵌入 JavaScript 引擎
ScriptEngine e = new ScriptEngineManager().getEngineByName("js");
int res = ((Number)e.eval("7/7+9-9*5/5")).intValue();
你需要像Reverse Polish notation这样的东西。这大约需要一天时间来理解算法并将其移植到 Java。您绝对可以在 Google 上搜索代码,但我强烈建议您学习该 wiki 页面。
我会让框架和其他库为我完成工作。如果这是学术问题,我建议使用 Lai Vung 提供的解决方案。使用 ScriptManager 为您进行解析和计算,然后将输出转换为所需的类型。快速演示:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Main {
public static void main(String[] args) throws ScriptException {
String question;
int answer;
question = "7/7+9-9*5/5";
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
answer = ((Number)engine.eval(question)).intValue();
}
}
值得一提的是:如果 android 不提供对 Script 引擎的支持,您可能必须将 ScriptEngine 库添加到您的路径中。可以在此处找到解释如何使用 Android 和 Rhino 的好帖子。
1. Javascript 引擎
2.Java编译器
a) 将字符串编译成 Java 类
b) 使用自定义 ClassLoader 加载类。
c) 使用反射执行它。
这是一个示例: