制作计算器
Making the Calculator
我知道有很多方法可以解决这个问题,我知道使用 if 语句的“愚蠢”方法,但是我一直在尝试使用更少的代码,但更多地使用它。
if(ope == "+")
{
result = userInput + userInput2;
Console.WriteLine(result);
}
并为所有操作员复制过去的垃圾内容。
我列出了所有运算符,我想我可以检查列表,如果输入不等于列表中的任何内容,请重复,直到选择运算符。 (这可能会导致一个错误()如果用户写了一个以上的正确答案会发生什么,它会从列表或第一个中获取更多。一个例子:如果用户输入 +- /(甚至还没有走到这一步会怎样), 两者都在列表中。
下面是我编写的用于获取双倍代码的示例:
一个例子是“while (!double.TryParse(Console.ReadLine(), out userInput));”从代码片段中,代码不会采用任何字符串值,并一遍又一遍地重复代码,直到 userInput 是一个数字。
我不知道如何使用 do while 循环来循环代码以检查 userInput 是否与列表具有相同的值包含:数学运算符 +、-、*、/;^、% 和 if用户输入不正确,重复代码直到正确。
我的问题是,我如何遍历列表,检查输入是否正确,挑选出正确的输入并求解 userInput X userInput2 上的方程。用户是否应该选择 2 个运算符,例如 / 和 - Repeat 循环。仅选择 1 个操作员。
private static void Main(string[] args)
{
List<string> OperatorToUse = new List<string>();
OperatorToUse.Add("+");
OperatorToUse.Add("-");
OperatorToUse.Add("/");
OperatorToUse.Add("*");
OperatorToUse.Add("%");
OperatorToUse.Add("^");
double userInput;
double userInput2;
var result;
var ope;
do
{
Console.WriteLine("Enter Your first number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput));
#If the answer is X, and user Input is also X. stop the Loop
#Not working
do
{
Console.WriteLine("Enter your Operator: ");
} while (!OperatorToUse.Contains(Console.ReadLine(), out OperatorToUse));
#Not working
do
{
Console.WriteLine("Enter your Operator: ");
} while (Console.Readline(ope) == "+" || ope == "-" || ope == "/");
do
{
Console.WriteLine("Enter Your Second number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput2));
Console.WriteLine($"{result}");
}
您的 while 循环应如下所示:
do
{
Console.WriteLine("Enter your Operator: ");
ope = Console.ReadLine()?.Trim();
} while (!OperatorToUse.ContainsKey(ope));
在下面的示例中,我使用的不是 List,而是 Dictionary,但思路是一样的。
为了避免每个运算符的 if 语句,您应该使用字典并将每个运算符添加为键,将相应的数学函数添加为值。您可以像示例中那样使用委托来执行此操作。然后你只需通过使用所选运算符从字典中检索它来调用相应的函数,如下所示:
OperatorToUse[ope](userInput, userInput2)
internal class Program
{
delegate double MathOperation(double a, double b);
static void Main(string[] args)
{
Dictionary<string, MathOperation> OperatorToUse = new Dictionary<string, MathOperation>();
OperatorToUse.Add("+", (a, b) => a + b);
OperatorToUse.Add("-", (a, b) => a - b);
OperatorToUse.Add("/", (a, b) => a / b);
OperatorToUse.Add("*", (a, b) => a * b);
OperatorToUse.Add("%", (a, b) => a % b);
OperatorToUse.Add("^", Math.Pow);
double userInput;
double userInput2;
string ope = String.Empty;
do
{
Console.WriteLine("Enter Your first number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput));
do
{
Console.WriteLine("Enter your Operator: ");
ope = Console.ReadLine()?.Trim();
} while (!OperatorToUse.ContainsKey(ope));
do
{
Console.WriteLine("Enter Your Second number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput2));
Console.WriteLine($"{OperatorToUse[ope](userInput, userInput2)}");
}
}
我知道有很多方法可以解决这个问题,我知道使用 if 语句的“愚蠢”方法,但是我一直在尝试使用更少的代码,但更多地使用它。
if(ope == "+")
{
result = userInput + userInput2;
Console.WriteLine(result);
}
并为所有操作员复制过去的垃圾内容。
我列出了所有运算符,我想我可以检查列表,如果输入不等于列表中的任何内容,请重复,直到选择运算符。 (这可能会导致一个错误()如果用户写了一个以上的正确答案会发生什么,它会从列表或第一个中获取更多。一个例子:如果用户输入 +- /(甚至还没有走到这一步会怎样), 两者都在列表中。
下面是我编写的用于获取双倍代码的示例: 一个例子是“while (!double.TryParse(Console.ReadLine(), out userInput));”从代码片段中,代码不会采用任何字符串值,并一遍又一遍地重复代码,直到 userInput 是一个数字。
我不知道如何使用 do while 循环来循环代码以检查 userInput 是否与列表具有相同的值包含:数学运算符 +、-、*、/;^、% 和 if用户输入不正确,重复代码直到正确。
我的问题是,我如何遍历列表,检查输入是否正确,挑选出正确的输入并求解 userInput X userInput2 上的方程。用户是否应该选择 2 个运算符,例如 / 和 - Repeat 循环。仅选择 1 个操作员。
private static void Main(string[] args)
{
List<string> OperatorToUse = new List<string>();
OperatorToUse.Add("+");
OperatorToUse.Add("-");
OperatorToUse.Add("/");
OperatorToUse.Add("*");
OperatorToUse.Add("%");
OperatorToUse.Add("^");
double userInput;
double userInput2;
var result;
var ope;
do
{
Console.WriteLine("Enter Your first number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput));
#If the answer is X, and user Input is also X. stop the Loop
#Not working
do
{
Console.WriteLine("Enter your Operator: ");
} while (!OperatorToUse.Contains(Console.ReadLine(), out OperatorToUse));
#Not working
do
{
Console.WriteLine("Enter your Operator: ");
} while (Console.Readline(ope) == "+" || ope == "-" || ope == "/");
do
{
Console.WriteLine("Enter Your Second number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput2));
Console.WriteLine($"{result}");
}
您的 while 循环应如下所示:
do
{
Console.WriteLine("Enter your Operator: ");
ope = Console.ReadLine()?.Trim();
} while (!OperatorToUse.ContainsKey(ope));
在下面的示例中,我使用的不是 List,而是 Dictionary,但思路是一样的。
为了避免每个运算符的 if 语句,您应该使用字典并将每个运算符添加为键,将相应的数学函数添加为值。您可以像示例中那样使用委托来执行此操作。然后你只需通过使用所选运算符从字典中检索它来调用相应的函数,如下所示:
OperatorToUse[ope](userInput, userInput2)
internal class Program
{
delegate double MathOperation(double a, double b);
static void Main(string[] args)
{
Dictionary<string, MathOperation> OperatorToUse = new Dictionary<string, MathOperation>();
OperatorToUse.Add("+", (a, b) => a + b);
OperatorToUse.Add("-", (a, b) => a - b);
OperatorToUse.Add("/", (a, b) => a / b);
OperatorToUse.Add("*", (a, b) => a * b);
OperatorToUse.Add("%", (a, b) => a % b);
OperatorToUse.Add("^", Math.Pow);
double userInput;
double userInput2;
string ope = String.Empty;
do
{
Console.WriteLine("Enter Your first number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput));
do
{
Console.WriteLine("Enter your Operator: ");
ope = Console.ReadLine()?.Trim();
} while (!OperatorToUse.ContainsKey(ope));
do
{
Console.WriteLine("Enter Your Second number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput2));
Console.WriteLine($"{OperatorToUse[ope](userInput, userInput2)}");
}
}