基本 OOP 控制台计算器,结果错误

Basic OOP console calculator, result Error

我是编程新手,我正在尝试用 C# 编写我的第一个 OOP 程序,但它没有给出正确的结果。

-程序必须根据用户输入计算两个数字。

我试图在不重复自己的情况下对其进行编码,所以可能这就是为什么我不明白为什么它不起作用的原因。

计划class:

static void Main(string[] args)
{
    CalcOperations calcOperations = new CalcOperations();
    Console.WriteLine("Welcome to basic OOP calculator! Enter a number. {0}1 - Addition{0}2 - Substraction{0}3 - Multiplication{0}4 - Division", Environment.NewLine);

    var getOperation = new double[] {
                            calcOperations.Counting(),
                            calcOperations.Subtraction(),
                            calcOperations.Multiplication(),
                            calcOperations.Division()
                       };
    var userInput = int.Parse(Console.ReadKey().KeyChar.ToString());
    Console.WriteLine();

    GetUserInput();
    Console.WriteLine(calcOperations.result);

    Console.ReadKey();
}

static void GetUserInput()
{
    CalcOperations calcOperations = new CalcOperations();
    Console.WriteLine("Enter the 1. number: ");
    calcOperations.firstNum = double.Parse(Console.ReadLine());
    Console.WriteLine("Enter the 2. number: ");
    calcOperations.secondNum = double.Parse(Console.ReadLine());
}

-Class计算运算

class CalcOperations
{
    public double firstNum;
    public double secondNum;
    public double result;

    public double Counting()
    {
        result = firstNum + secondNum;
        return result;
    }
    public double Subtraction()
    {
        result = firstNum - secondNum;
        return result;
    }
    public double Multiplication()
    {
        result = firstNum * secondNum;
        return result;
    }
    public double Division()
    {
        result = firstNum / secondNum;
        return result;
    }
}

给它两个数字后,结果它只说 NaN。

您的代码存在三个问题:

  • 您正在创建 class CalcOperations 的两个不同对象,一个在您的主函数中,另一个在您的 GetUserInput 函数中,该函数一旦执行完毕就会被丢弃。而是将您的 class 对象发送到函数。

  • 在使用用户输入数据调用函数之前,您需要收集用户输入。在填充数组之前,只需将 GetUserInput 调用移动到。

  • 结果变量由所有函数调用填充,因此除法是最后一次调用将填充结果变量。而是在数组中打印相反的值。

以下是更正后的代码:

static void Main(string[] args)
{
    CalcOperations calcOperations = new CalcOperations();
    Console.WriteLine("Welcome to basic OOP calculator! Enter a number. {0}1 - Addition{0}2 - Substraction{0}3 - Multiplication{0}4 - Division", Environment.NewLine);


    var userInput = int.Parse(Console.ReadKey().KeyChar.ToString());
    Console.WriteLine();

    GetUserInput(calcOperations);

var getOperation = new double[]{
                           calcOperations.Counting(),
                           calcOperations.Subtraction(),
                           calcOperations.Multiplication(),
                           calcOperations.Division()
    };
    Console.WriteLine(getOperation[userInput-1]);

    Console.ReadKey();
}
static void GetUserInput(CalcOperations calcOperations)
{
    Console.WriteLine("Enter the 1. number: ");
    calcOperations.firstNum = double.Parse(Console.ReadLine());
    Console.WriteLine("Enter the 2. number: ");
    calcOperations.secondNum = double.Parse(Console.ReadLine());
}

编辑: 请记住验证用户输入,因为它们可能无效。

对于 Diezerk 刚才提到的问题的更根本原因,您正在制作一个函数调用数组 结果 ,而不是函数本身。您可能希望使用 Func 委托而不使用括号(从而形成对 calcOperations 函数的引用的数组),或者使用完全规则的 switch 语句来决定要执行的操作。

            static void Main(string[] args) {
                CalcOperations calcOperations = new CalcOperations();
                Console.WriteLine("Welcome to basic OOP calculator! Enter a number. {0}1 - Addition{0}2 - Substraction{0}3 - Multiplication{0}4 - Division", Environment.NewLine);

                var getOperation = new Func<double>[]{
                               calcOperations.Counting,
                               calcOperations.Subtraction,
                               calcOperations.Multiplication,
                               calcOperations.Division
                };
                var userInput = int.Parse(Console.ReadKey().KeyChar.ToString());
                Console.WriteLine();

                GetUserInput(calcOperations);
                getOperation[userInput - 1]();
                Console.WriteLine(calcOperations.result);

                Console.ReadKey();
            }
            static void GetUserInput(CalcOperations calcOperations) {
                Console.WriteLine("Enter the 1. number: ");
                calcOperations.firstNum = double.Parse(Console.ReadLine());
                Console.WriteLine("Enter the 2. number: ");
                calcOperations.secondNum = double.Parse(Console.ReadLine());
            }