2013-12-16 66 views
0

我想创建一个方法,其中输入是一个字符串,它是一个方程,并返回方程的结果。从字符串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()); 
    } 
} 
+0

你需要什么? –

+1

为了促进这一过程,如果您除了查看程序之外还尝试了其他任何方法,请告知我们。你运行过吗?你使用了什么输入?结果是什么? – user1445967

+0

我在这里发布的是一个类Evaluate的代码,我想要的是一个获取String作为输入并在Double值下返回结果的方法。 – CiucaS

回答

1

Evaluate程序,你发现被阅读表达(据说来自STDIN)每个令牌和它的工作。如果你要重用这个程序,你需要

  1. 写tokenator会生成令牌出字符串表达式的
    • 即返回“23 * 14 *(15-4)”为[ 23, *, 13, *, (, 15, -, 4,) ]列表
  2. 重构的主要方法通过它来采取Iterator<String>和迭代器,其中next()方法返回列表中的下一个标记。
  3. 将list.iterator()从上面#1中生成的列表传递给#2中的重构方法。

HTH。

相关问题