反向波兰表示法:从输入文本框中获取值以执行计算

时间:2012-11-30 05:21:04

标签: c#

我是新手C#编码员,目前正在研究反向抛光记谱计算器。我创建了一个将负责计算的方法,但我的代码中有三行导致错误。执行每个=操作然后显示。我试图从TxtInputBox中获取字符串并转换为整数,但下面的行是我获得红色波浪线的地方:string[] inputarray = TxtBoxInputbox.Text.Split();。第二,当从按钮单击Btn_Calc调用函数RPNCalc并分配textBoxes时,我收到另一条红色波浪线:RPNCalc(TxtInputBox, TxtOutputBox);我不知道如何处理这两个错误导致我的表单无法工作。请帮助制作无错误。

代码

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

        private void RPNCalc(TxtBoxInputbox, TxtBoxOutputbox)
        {
            Stack<int> stackone = new Stack<int>();
            stackone.Clear();
            string[] inputarray = TxtBoxInputbox.Text.Split();
            int end = inputarray.Length - 1;
            int numinput;
            int i = 0;

            do
            {
                if(inputarray[i] != "=" && inputarray[i] != "+" && inputarray[i] != "-" && inputarray[i] != "*" && inputarray[i] != "/")  
                {
                    try
                    {
                        numinput = Convert.ToInt32(inputarray[i]);
                        stackone.Push(numinput);
                    }
                    catch
                    {
                        MessageBox.Show("Please check the input");
                    }
                }

                    else if (inputarray[i]== "+")
                    {
                        try
                        {
                            int store1 = stackone.Pop();
                            int store2 = stackone.Pop();
                            stackone.Push(store2 + store1);
                        }
                        catch
                        {
                        }
                    }

                    else if (inputarray[i]== "-")
                    {
                        try
                        {
                            int store1 = stackone.Pop();
                            int store2 = stackone.Pop();
                            stackone.Push(store2 + store1);
                        }
                        catch
                        {
                        }
                    }

                    else if (inputarray[i]== "+")
                    {
                        try
                        {
                            int store1 = stackone.Pop();
                            int store2 = stackone.Pop();
                            stackone.Push(store2 + store1);
                        }
                        catch
                        {
                        }
                    }

                    else if (inputarray[i]== "*")
                    {
                        try
                        {
                            int store1 = stackone.Pop();
                            int store2 = stackone.Pop();
                            stackone.Push(store2 + store1);
                        }
                        catch
                        {
                        }
                    }

                    else if (inputarray[i]== "/")
                    {
                        try
                        {
                            int store1 = stackone.Pop();
                            int store2 = stackone.Pop();
                            stackone.Push(store2 + store1);
                        }
                        catch
                        {
                        }
                    }

            }
            while(i < end && inputarray[i]!= "=" && stackone.Count != 0);
            string txtout = TxtInputBox + " " + stackone.Pop().ToString() + Environment.NewLine;
            TxtOutputBox.AppendText(txtout);
            TxtInputBox.Clear();

        }

        private void Btn_Calc_Click(object sender, EventArgs e)
        {
            RPNCalc(TxtInputBox, TxtOutputBox);
        }

    }
}

enter image description here

1 个答案:

答案 0 :(得分:2)

您的RPNCalc方法签名缺少参数类型。你的意思是:

private void RPNCalc(TextBox TxtBoxInputbox, TextBox TxtBoxOutputbox)

附注,由于RPNCalc是表单的成员函数,因此它已经可以访问成员this.TxtBoxInputboxthis.TxtBoxOutputbox。所以你根本不需要传递任何参数。

虽然我们讨论的是主题,如果它是我的代码,我可能会重写整个方法而不使用参数,返回一个int(即private int RPNCalc()),它会占用this.TxtBoxInputbox中的任何内容,做计算,并返回结果。然后,调用方法可以对结果执行它想要的操作(在这种情况下,将其添加到输出中)。但是,这确实超出了原始问题的范围。