java中基于字符串的表达式求值
我想创建一个方法,其中输入是一个字符串,它是一个方程,返回方程的结果
像这样的
String s;
s = "23*14*(15-4)";
System.out.println(ecuation(s));
我找到了一个java程序,可以计算一个等式,但我不知道如何使它适应我的需要。有人能帮忙吗
public class Evaluate {
public static void main(String[] args) {
Stack<String> ops = new Stack<String>();
Stack<Double> vals = new Stack<Double>();
while (!StdIn.isEmpty()) {
String s = StdIn.readString();
if (s.equals("(")) ;
else if (s.equals("+")) ops.push(s);
else if (s.equals("-")) ops.push(s);
else if (s.equals("*")) ops.push(s);
else if (s.equals("/")) ops.push(s);
else if (s.equals("sqrt")) ops.push(s);
else if (s.equals(")")) {
String op = ops.pop();
double v = vals.pop();
if (op.equals("+")) v = vals.pop() + v;
else if (op.equals("-")) v = vals.pop() - v;
else if (op.equals("*")) v = vals.pop() * v;
else if (op.equals("/")) v = vals.pop() / v;
else if (op.equals("sqrt")) v = Math.sqrt(v);
vals.push(v);
}
else vals.push(Double.parseDouble(s));
}
StdOut.println(vals.pop());
}
}
# 1 楼答案
您找到的
Evaluate
程序正在读取表达式中的每个标记(可能来自STDIN)并对其进行处理。如果你要重用这个程序,你需要[ 23, *, 13, *, (, 15, -, 4, ) ]
列表Iterator<String>
并遍历它,其中next()
方法返回列表中的下一个标记李>嗯