0

私は初心者のC#コーダーであり、現在、逆ポーランド記法計算機に取り組んでいます。計算を処理するメソッドを作成しましたが、エラーの原因となっているコードが3行あります。すべて=の操作が実行されてから表示された後。文字列を取得しTxtInputBoxて整数に変換しようとしていますが、次の行に赤い波線が表示されますstring[] inputarray = TxtBoxInputbox.Text.Split();。次に、ボタンをクリックして関数RPNCalcを呼び出し、Btn_CalctextBoxを割り当てると、別の赤い波線が表示されますRPNCalc(TxtInputBox, TxtOutputBox);。フォームが機能しない原因となるこれら2つのエラーに対処する方法がわかりません。エラーをなくすのを手伝ってください。

コード

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.TxtBoxInputboxとにアクセスできますthis.TxtBoxOutputbox。したがって、実際にパラメータを渡す必要はまったくありません。

私たちがトピックに取り組んでいる間、それが私のコードである場合、おそらくパラメータなしでメソッド全体を書き直して、中にあるものをすべて受け取り、計算を行い、結果を返すint(つまりprivate int RPNCalc())を返します。this.TxtBoxInputbox呼び出し元のメソッドは、結果を使用して必要な処理を実行できます(この場合は、結果を出力に追加します)。ただし、これは元の質問の範囲を超えています。

于 2012-11-30T05:25:01.683 に答える