2013-12-16 67 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。