反向波兰表示法计算器:抓取输入并显示结果

时间:2012-12-01 18:06:07

标签: c#

我能够创建一个执行反向波兰表示法的函数。该方法的结构很好,我遇到的两个问题是如何抓取用户在textBox1中输入的公式并在textBox2上显示答案(公式=答案)。我已将变量textBox1分配给rpnValue,但它会显示错误消息A field initializer cannot reference the non-static field, method, or property 'modified_rpn.Form1.textBox1'。那么如何再次获取用户在textBox1中输入的公式并在多行`textBox2上显示答案(公式=答案)?

代码

namespace rpn
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string rpnValue = textBox1.Text; 

        private void RPNCalc(rpnValue)
        {
            Stack<int> stackCreated = new Stack<int>();
            try
            {
                var tokens = rpnValue.Replace("(", " ").Replace(")", " ")
                                     .Split().Where(s => !String.IsNullOrWhiteSpace(s));
                foreach (var t in tokens)
                {
                    try
                    {
                        stackCreated.Push(Convert.ToInt32(t));
                    }
                    catch
                    {
                        int store1 = stackCreated.Pop();
                        int store2 = stackCreated.Pop();
                        switch (t)
                        {
                            case "+": store2 += store1; break;
                            case "-": store2 -= store1; break;
                            case "*": store2 *= store1; break;
                            case "/": store2 /= store1; break;
                            case "%": store2 %= store1; break;
                            case "^": store2 = (int)Math.Pow(store1, store2); break; 
                            default: throw new Exception();
                        }
                        stackCreated.Push(store2);
                    }
                }

                if (stackCreated.Count != 1)
                    MessageBox.Show("Please check the input");
                else
                    textBox1.Text = stackCreated.Pop().ToString();

            }
            catch
            {
                MessageBox.Show("Please check the input");
            }

            textBox2.AppendText(rpnValue);
            textBox1.Clear();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            RPNCalc(textBox1, textBox2);
        }
    }
}

enter image description here

2 个答案:

答案 0 :(得分:1)

您的代码有三个问题:

首先,在第string rpnValue = textBox1.text行访问文本框文本的值是不合逻辑的;其次,

private void button1_Click(object sender, EventArgs e)
        {
            RPNCalc(textBox1, textBox2);
        }

在这里,您可以看到,当RPNCalc()实际上只期待一个时,您正在提供2个参数。你需要认真了解你在这里要做的事情。此外,您不必在定义该方法时指定提供给RPNCalc()的值的“类型”。

重读你的C#书: - )

答案 1 :(得分:0)

您需要移动此行:

    string rpnValue = textBox1.Text; 

在方法或函数中。你有一个方法或功能,你不能这样做。