我目前正在自学 C#,并提出了如下的程序想法:
- 程序生成随机数
- 程序生成随机数学运算符
- 程序生成随机数
- 询问用户随机生成问题的答案
- 用户输入答案
- 程序将生成的问题的结果与用户的输入进行比较
- 程序打印用户是否正确。
我遇到的问题是我只能以以下格式/数据类型打印方程:
(示例)5 + 1 (数字、字符串运算符、数字)
或者将上述数据类型组合成一个字符串
从那里开始,问题是我无法弄清楚如何将所有这些转换为可以存储在变量中然后与用户输入进行比较的数学方程。
我确信我让事情变得比实际情况更加困难,但我已经浏览过这个程序、论坛和大量帖子,但无法将任何内容拼凑在一起。
在我学习 C# 的过程中,任何对我的代码以及我出错的地方的见解都将不胜感激!
public static void Main(string[] args)
{
mathProblem();
int userAnswer = Convert.ToInt32(Console.ReadLine());
}
public static void mathProblem()
{
Random numberGenerator = new Random();
Random operatorSelect = new Random();
//Generates random number for 1st part of problem
int number1 = numberGenerator.Next(1, 11);
//Generates random number for 2nd part of problem
int number2 = numberGenerator.Next(1, 11);
//int to store/assign random operator
int mathOperator = 0;
//newOperator set to empty string that will change and store operator generated
string newOperator = "";
// gives value of 1-4
mathOperator = operatorSelect.Next(5);
switch (mathOperator)
{
case 1:
newOperator = "+";
break;
case 2:
newOperator = "-";
break;
case 3:
newOperator = "*";
break;
case 4:
newOperator = "/";
break;
default:
newOperator = "+";
break;
}
Convert.ToString(number1);
Convert.ToString(number2);
Console.WriteLine("What is " + number1 + " " + newOperator + " " + number2 + "?");
}
最佳答案
算术运算是接受两个数字并返回第三个数字的函数。一般来说,它们可以表示为函数:
int AddOperation(int a, int b)
{
return a + b;
}
此类函数的委托(delegate)可以存储在类型为 Func<int,int,int>
的变量中。 .
Func<int,int,int> functionPointer = AddOperation;
而不是仅仅为 AddOperation
声明整个方法,您还可以将其存储为 anonymous method用 lambda expression 声明:
Func<int,int,int> functionPointer = (a,b) => a + b;
您可以存储一系列这些函数,例如,存储在字典中:
var operators = new Dictionary<string,Func<int,int,int>>
{
{ "+", (a,b) => a + b },
{ "-", (a,b) => a - b },
{ "*", (a,b) => a * b },
{ "/", (a,b) => a / b }
};
然后要执行操作,请查找函数:
var symbol = "+";
var operation = operators[symbol];
...并用它来计算结果:
var result = operation(arg1,arg2);
下面是对数字 10 和 2 执行所有四种运算的示例:
public static void Main()
{
var operators = new Dictionary<string,Func<int,int,int>>
{
{ "+", (a,b) => a + b },
{ "-", (a,b) => a - b },
{ "*", (a,b) => a * b },
{ "/", (a,b) => a / b }
};
var arg1 = 10;
var arg2 = 2;
foreach (var symbol in operators.Keys)
{
var func = operators[symbol];
var result = func(arg1,arg2);
Console.WriteLine("{0}{1}{2}={3}", arg1, symbol, arg2, result);
}
}
输出:
10+2=12
10-2=8
10*2=20
10/2=5
关于C# 随机控制台数学方程游戏 : Converting string back to equation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52844358/