有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您找到的Evaluate程序正在读取表达式中的每个标记(可能来自STDIN)并对其进行处理。如果你要重用这个程序,你需要

    1. 编写一个标记器,从字符串表达式中生成标记
      • i、 e.返回“23*14*(15-4)”作为[ 23, *, 13, *, (, 15, -, 4, ) ]列表
    2. 重构main方法以获取一个Iterator<String>并遍历它,其中next()方法返回列表中的下一个标记
    3. 通过名单。迭代器()从上面#1中生成的列表到#2中的重构方法