0

現在、逆ポーランド記法を使用しています。指数演算を除くすべての操作を実行できました。C#sharps が指数演算を実行することは承知してMath.Powいますが、それをコードで使用するとエラーが発生します'System.Collections.Generic.Stack<T>.Push(T)' is a 'method', which is not valid in the given contextif else最後のステートメントで特定の問題を見つけることができます。指数計算を実行する方法を適切に修正または作成する方法はありますか?

コード

private string inputValue = "";

private void RPNCalc(string rpnValue)
{
Stack<int> stackCreated = new Stack<int>();
stackCreated.Clear();
string[] inputArray = rpnValue.Split();
int end = inputArray.Length - 1;
int numInput;
int i = 0;

do
{
    if ("=+-*/%^".IndexOf(inputArray[i]) == -1)
    {
        try
        {
            numInput = Convert.ToInt32(inputArray[i]);
            stackCreated.Push(numInput);
        }
        catch
        {
            MessageBox.Show("Please check the input");
        }
    }

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

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

        else if (inputArray[i]== "%")
        {
            try
            {
                int store1 = stackCreated.Pop();
                int store2 = stackCreated.Pop();
                stackCreated.Push(store2 % store1);
            }
            catch
            {
            }
        }

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

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

        else if (inputArray[i] == "^")
        {
            try
            {
                int store1 = stackCreated.Pop();
                int store2 = stackCreated.Pop();
                stackCreated.Push.Math.Pow(store1, store2);
            }
            catch
            {
            }
        }

}
while(i++ < end && inputArray[i]!= "=" && stackCreated.Count != 0);
string result = inputValue + " " + stackCreated.Pop().ToString() + Environment.NewLine;
TxtOutputBox.AppendText(result);
TxtInputBox.Clear();

}
4

1 に答える 1

3

次のようにする必要があります。

stackCreated.Push((int)Math.Pow(store1, store2));

これにより、電源操作が実行され、結果がスタックにプッシュされます。

そのようなこと:

int tmp = (int)Math.Pow(store1, store2);
stackCreated.Push(tmp);

Math.Pows で動作することにも注意してくださいdouble。ints ( store1and store2) は自動的に に変換されdoubleますが、コンパイラに結果をキャストして an に戻すように指示する必要がありますint

于 2012-11-30T16:30:12.097 に答える