计算器数学错误

时间:2016-06-16 22:59:43

标签: c# math unity3d stack calculator

我在Unity Engine中使用Dijkstra's Two-stack Calculator。 我收到了数学错误。

输入:" 3 + 2" ,输出: 5

BUT

输入:" 30 + 20" ,输出: 2

此代码有什么问题?

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

答案 0 :(得分:3)

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

此行一次只考虑一位数。

运行您的代码:  输入=(30 + 20)

I = 0

vals stack:
ops stack:

I = 1
3
vals stack:3
ops stack:

I = 2
0
vals堆栈:0,3 ops stack:

I = 3
+
vals堆栈:0,3 ops stack:+

i = 4的
2
vals堆栈:2,0,3 ops stack:+

I = 5
0
vals堆栈:0,2,0,3 ops stack:+

I = 6

vals stack: 0,2 ,0,3 ops stack:+

完成后,弹出0和2并添加它们以获得最终答案:2