標題: Java编程问题,求救! [打印本頁] 作者: niceperson 時間: 2013-10-7 22:07 標題: 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());
}
}
以上所有方法均已声明,在使用Dijkstra的双栈算术表达式求值算法,无论输入什么,都会出现以下错误
java.lang.NumberFormatException: For input string: "什么都可以,无论是带括号的算式或者简单计算"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
at java.lang.Double.parseDouble(Double.java:540)
at Evaluate.main(Evaluate.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
为什么呢??? 作者: alan3 時間: 2013-10-8 21:20
hoho,四则运算作者: hk1202 時間: 2013-11-7 23:49
没仔细看,只是想问,为什么你要用if嵌套的方法?直接用类似Switch这类开关语句不行?估计错误就在IF嵌套里头了。属于逻辑错误吧