2016-06-16 23 views
-1

UnityエンジンでDijkstra's Two-stack Calculatorを使用しています。 数学的なエラーが発生しました。計算機の数学的なエラー

入力:"3 + 2"、出力:

しかし

入力:"30 + 20"、出力:

何このコードで間違っていますか?

CODE

using System.Collections.Generic; 
public class Calculator 
{ 
    public float Evaluate(string Input) 
    { 
     string Expression = "(" + Input + ")"; 
     Stack<string> ops = new Stack<string>(); 
     Stack<float> vals = new Stack<float>(); 
     for (int i = 0; i < Expression.Length; i++) 
     { 
      string s = Expression.Substring(i, 1); 
      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(")")) 
      { 
       int count = ops.Count; 
       while (count > 0) 
       { 
        string op = ops.Pop(); 
        float 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; 
        vals.Push(v); 
        count--; 
       } 
      } 
      else vals.Push(float.Parse(s)); 
     } 
     return vals.Pop(); 
    } 
} 
+1

は、あなたはそれをデバッグしていますか?一見すると、2桁の値は考慮されていません。 '2 + 0'を評価します。 '3'と' 0'はスタックに残っていて、決して調べられません – Rob

答えて

3
else vals.Push(float.Parse(s)); 

この行は一度に一桁を検討します。コードを介し

実行: 入力=(30 + 20)

I = 0

ヴァルスは、スタック:
OPSはスタック:

I = 1
ヴァルススタック:3
opsスタック:

i = 2
ヴァルスは、スタック:0、3
OPSはスタック:

I = 3
+
ヴァルスは、スタック:0、3つの
OPSはスタック:+

I = 4
vals stack:2,0,3 3,
opsスタック:+

I = 5
ヴァルスは、スタック:0、2、0、3つの
OPSはスタック:+

I = 6

ヴァルススタック:0,2、0,3
OPSはスタック:作業が終了したら+

、あなたは0と2をポップし、あなたの最終的な答えを得るためにそれらを追加:2