0

これが小さなことであり、大きな問題ではないことを願っています。私は、演算子を要求するプログラム(本を介した自己教育)をコーディングしています。次に、数値の配列を使用して演算子を適用し、結果を取得します。プログラムは数字の入力を求めず、空の配列を想定しています。配列に数値を入力するように要求されるように再コード化する方法ではなく、何が問題なのかを理解していると思います。

もう 1 つ気になっているのは、Operator が有効でない場合、クラス コードの最初のスイッチでプログラムを強制的に終了させることはできますか? Application.Exit() を見つけましたが、それは WinForms でしか機能しないようです。同等の C# コードはありますか?

私の主な方法は次のとおりです。

    static void Main(string[] args)
    {
        MathMethodClass mathMethods = new MathMethodClass();

        int[] intArray = new int[] { };

        Console.Write("Choose an Operator + or *: ");
        string whichOp = Console.ReadLine();

        Console.WriteLine("Thank you.  You chose {0}.", mathMethods.OperatorName(whichOp));

        Console.WriteLine("Please enter an array of numbers: ");

        for (int i=0;i<intArray.Length;i++)
        {
            intArray[i] = Int32.Parse(Console.ReadLine());
        }

        Console.WriteLine("Thank you.  You entered the numbers {0}", intArray);

        Console.WriteLine("The answer is: {0}.", mathMethods.MathMethod(whichOp, intArray));

        Console.ReadLine();
    }

そして、私のクラスは次のとおりです。

class MathMethodClass
{
    public string OperatorName(string whichOp)
    {
        switch (whichOp)
        {
            case "+":
                whichOp = "addition";
                break;
            case "*":
                whichOp = "multiplication";
                break;
            default:
                Console.WriteLine("Error: Unknown Operator. Exiting ...");
                Console.ReadLine();
                break;
        }

        return whichOp;
    }

    public int MathMethod(string whichOp, params int[] theNums)
    {
        int theAnswer = 0;

        switch (whichOp)
        {
            case "+":
                for (int ct = 0; ct < theNums.Length; ct++)
                {
                    theAnswer += theNums[ct];
                }
                break;

            case "*":
                for (int ct = 0; ct < theNums.Length; ct++)
                {
                    theAnswer *= theNums[ct];
                }
                break;

            default:
                Console.WriteLine("Error. Something went wrong in the MathMethod. Exiting ...");
                Console.ReadLine();
                break;
        }

        return theAnswer;
    }
}

どこが間違っているのかを教えてくれると助かります。

ありがとう。

4

2 に答える 2

1

あなたの問題はここにあると思います

int[] intArray = new int[] { }; 

長さが 0 の空の配列を指定しています

したがって、このステートメント

for (int i=0;i<intArray.Length;i++) 

ループに入ることはありません。

于 2012-09-18T04:13:29.537 に答える
1

配列サイズを指定する必要があります。現在、空の配列を作成しています。次のようなサイズで定義します。

    int[] intArray = new int[5];

または、より良いアプローチは、ユーザーに配列サイズを尋ねることです。for ループの前に次のコードを追加します。

Console.Write("Enter Number of elements in Array: ");
arraySize = int.Parse(Console.ReadLine());
intArray = new int[arraySize];

Console.WriteLine("Please enter an array of numbers: ");

for (int i = 0; i < intArray.Length; i++)
{
    intArray[i] = Int32.Parse(Console.ReadLine());
}

元のコードでは、ループの後で0サイズの配列を指定しint[] intArray = new int[] { };ているため、長さに対してチェックしているため、ループに入っていません。それがあなたが問題を抱えている理由です。それ以外のコードは問題ないようです。有効な入力をチェックできるように、代わりにint.TryParseを使用することをお勧めします。int.Parseint

于 2012-09-18T04:14:17.210 に答える