0

逆ポーランド記法を実行する関数を作成できました。メソッドの構造は問題ありません。私が直面している2つの問題は、ユーザーが入力した数式を取得して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);
        }
    }
}

ここに画像の説明を入力してください

4

2 に答える 2

1

コードに関する3つの問題:

1つ目は、テキストボックスのテキストの値に次の行でアクセスするのは非論理的です。2つ目はstring rpnValue = textBox1.text

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

RPNCalc()ここでは、実際には1つしか期待していないときに2つの引数を指定していることがわかります。ここで何をしようとしているのかを真剣に理解する必要があります。RPNCalc()また、そのメソッドの定義中に提供される値の「タイプ」を指定しないでください。

C#の本を読み直してください:-)

于 2012-12-01T18:19:03.340 に答える
0

この行を移動する必要があります:

    string rpnValue = textBox1.Text; 

メソッドまたは関数の内部。メソッドまたは関数の外にあり、それを行うことはできません。

于 2012-12-01T18:13:16.200 に答える