0

我是一名新手 C# 编码器,目前正在研究反向波兰符号计算器。我创建了一个方法来处理计算,但我的代码中有三行导致错误。每=执行一次操作,然后显示。我正在尝试从中获取字符串TxtInputBox并将其转换为整数,但以下行是我得到红色波浪线的地方string[] inputarray = TxtBoxInputbox.Text.Split();:其次,当从按钮单击调用函数 RPNCalcBtn_Calc并分配 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);
        }

    }
}

在此处输入图像描述

4

1 回答 1

2

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

private void RPNCalc(TextBox TxtBoxInputbox, TextBox TxtBoxOutputbox)

旁注,作为RPNCalc表单的成员函数,它已经可以访问成员this.TxtBoxInputboxthis.TxtBoxOutputbox. 因此,您实际上根本不需要向它传递任何参数。

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

于 2012-11-30T05:25:01.683 回答