比思論壇

標題: 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嵌套里头了。属于逻辑错误吧




歡迎光臨 比思論壇 (http://108.170.5.99/) Powered by Discuz! X2.5