基本 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());
}
我是编程新手,我正在尝试用 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());
}