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

C# 基本OOP控制台计算器,结果错误,c#,console-application,calculator,C#,Console Application,Calculator,我是编程新手,我正在尝试用C编写我的第一个OOP程序,但它没有给出正确的结果 -程序必须根据用户输入计算两个数字 我试图在不重复自己的情况下编写代码,所以可能这就是为什么我不明白为什么它不起作用 课程类别: 静态环[]args { 计算系数计算系数=新计算系数; Console.WriteLineWelcome到基本OOP计算器!输入一个数字。{0}1-加法{0}2-减法{0}3-乘法{0}4-除法,Environment.NewLine; var getOperation=new double

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

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

我试图在不重复自己的情况下编写代码,所以可能这就是为什么我不明白为什么它不起作用

课程类别:

静态环[]args { 计算系数计算系数=新计算系数; Console.WriteLineWelcome到基本OOP计算器!输入一个数字。{0}1-加法{0}2-减法{0}3-乘法{0}4-除法,Environment.NewLine; var getOperation=new double[]{ 计算,计算, 计算,减法, 计算,乘法, 计分 }; var userInput=int.ParseConsole.ReadKey.KeyChar.ToString; Console.WriteLine; GetUserInput; Console.WriteLineCalOperations.result; Console.ReadKey; } 静态void GetUserInput { 计算系数计算系数=新计算系数; Console.WriteLine输入1.编号:; calcOperations.firstNum=double.ParseConsole.ReadLine; Console.WriteLine输入2.编号:; calcOperations.secondNum=double.ParseConsole.ReadLine; } -用于计算运算的类

类计算器 { 公共双首数; 公共双秒数; 公众的双重结果; 公众重复计算 { 结果=firstNum+secondNum; 返回结果; } 公共双减法 { 结果=firstNum-secondNum; 返回结果; } 公共双倍乘法 { 结果=firstNum*secondNum; 返回结果; } 公共双师制 { 结果=firstNum/secondNum; 返回结果; } }
在给它两个数字后,结果只会显示NaN。

代码有三个问题:

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

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

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

以下是更正的代码:

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刚才提到的更根本的原因,您正在生成函数调用结果数组,而不是函数本身。您可能希望使用delegate和no圆括号来形成对calcOperations函数的引用数组,或者使用完全规则的switch语句来决定要执行的操作

静态环[]args{ 计算系数计算系数=新计算系数; Console.WriteLineWelcome到基本OOP计算器!输入一个数字。{0}1-加法{0}2-减法{0}3-乘法{0}4-除法,Environment.NewLine; var getOperation=new Func[]{ 计算,计算, 计算,减法, 计算,乘法, 计分 }; var userInput=int.ParseConsole.ReadKey.KeyChar.ToString; Console.WriteLine; GetUserInputcalcOperations; getOperation[userInput-1]; Console.WriteLineCalOperations.result; Console.ReadKey; } 静态无效GetUserInputCalcOperations calcOperations{ Console.WriteLine输入1.编号:; calcOperations.firstNum=double.ParseConsole.ReadLine; Console.WriteLine输入2.编号:; calcOperations.secondNum=double.ParseConsole.ReadLine; }
我觉得你在走路之前就想跑。从一个可以做加法的类开始,然后从那里开始,怎么样。而不是试图创造一些可以做很多事情的东西。谢谢你,它是有效的。是的,我明白了,出了什么问题。另外,代码的其余部分对你来说还可以吗?我的目的是把它写得简洁明了。是的,我知道出了什么问题。我知道有一种使用switch或if语句的方法,但我不想使用它。我正在尝试不同的编码方法。同时,有了这个开关,我会更容易,所以我选择了更艰难的道路。无论如何,谢谢你的回复