0

我希望这是一件小事,而不是一个大问题。我正在编写一个程序(通过书籍自学),它将要求一个运算符,然后是一组数字,然后应用运算符来获得结果。该程序没有提示我输入数字并假定一个空数组。我想我明白出了什么问题,只是不知道如何重新编码,以便它会要求我将数字输入数组。

我很好奇的另一件事是,如果运算符无效,我可以强制程序在类代码的第一个开关中退出吗?我找到了 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.Parse,以便您可以检查有效int输入。

于 2012-09-18T04:14:17.210 回答