在 C# 中随机化数学符号
Randomize math symbol in c#
有人可以指出正确的方向来创建使用随机数学符号时的 checktheanswer 方法吗?这是一道数学题。
Random random = new Random();
int num1 = random.Next(0, 100);
Label1.Text = Convert.ToString(num1);
char[] operators = { '+', '-', '*', '/' };
char op = operators[random.Next(operators.Length)];
label2.Text = Convert.ToString(op);
int num2 = random.Next(0, 100);
label3.Text = Convert.ToString(num2);
如何编写包含随机符号的方法?如果它是固定的(我认为):
private bool CheckTheAnswer()
{
if (num1 + num2 == sum.Value)
return true;
else
return false;
}
创建一个以运算符为键的字典,以及一个执行操作的委托作为值。像这样:
var operators = new Dictionary<char, Func<int, int, int>>() {
{ '+', (a, b) => a + b },
{ '-', (a, b) => a - b },
// Expand as you like: *, /, %, ^, |, &
};
// Check
var correct = answer == operators[operand](term1, term2);
您必须包括异常处理,例如除以零 and/or 溢出。
我不知道您是否能够将 char 直接包含为运算符,但您可以这样做:
你可以改变
char[] operators = { '+', '-', '*', '/' };
char op = operators[random.Next(operators.Length)];
至:
char[] operators = { '+', '-', '*', '/' };
int randomOperator = random.Next(operators.Length)
char op = operators[randomOperator];
并改变
if (num1 + num2 == sum.Value)
return true;
else
return false;
至:
if (randomOperator == 0 && num1 + num2 == Answer)
return true;
else if (randomOperator == 1 && num1 - num2 == Answer)
return true;
else if (randomOperator == 2 && num1 * num2 == Answer)
return true;
else if (randomOperator == 3 && num2 != 0 && num1 / num2 == Answer)
return true;
else
return false
我希望你明白了。
public class MathPuzzle
{
public string Question { get; set; }
public double Answer { get; set; }
public void PrepareQuestion()
{
Random random = new Random();
int num1 = random.Next(0, 100);
char[] operators = { '+', '-', '*', '/' };
char op = operators[random.Next(operators.Length)];
int num2 = random.Next(0, 100);
switch (op)
{
case '+':
Answer = num1 + num2;
break;
case '-':
Answer = num1 - num2;
break;
case '*':
Answer = num1 * num2;
break;
case '/':
Answer = Math.Round((double)num1 / (double)num2, 2);
break;
}
Question = string.Format("{0} {1} {2}", num1, op, num2);
}
public bool CheckTheAnswer(double userProvidedAnswer)
{
return userProvidedAnswer == Answer;
}
}
将上面的 MathPuzzle class 用作
private MathPuzzle puzzle = new MathPuzzle();
private void QustionButton_Click(object sender, EventArgs e)
{
puzzle.PrepareQuestion();
QuestionLabel.Text = puzzle.Question;
}
private void CheckAnswerButton_Click(object sender, EventArgs e)
{
double userAnswer = double.Parse(AnswerTextBox.Text);
if (puzzle.CheckTheAnswer(userAnswer))
MessageBox.Show("Correct");
else
MessageBox.Show("Wrong");
}
有人可以指出正确的方向来创建使用随机数学符号时的 checktheanswer 方法吗?这是一道数学题。
Random random = new Random();
int num1 = random.Next(0, 100);
Label1.Text = Convert.ToString(num1);
char[] operators = { '+', '-', '*', '/' };
char op = operators[random.Next(operators.Length)];
label2.Text = Convert.ToString(op);
int num2 = random.Next(0, 100);
label3.Text = Convert.ToString(num2);
如何编写包含随机符号的方法?如果它是固定的(我认为):
private bool CheckTheAnswer()
{
if (num1 + num2 == sum.Value)
return true;
else
return false;
}
创建一个以运算符为键的字典,以及一个执行操作的委托作为值。像这样:
var operators = new Dictionary<char, Func<int, int, int>>() {
{ '+', (a, b) => a + b },
{ '-', (a, b) => a - b },
// Expand as you like: *, /, %, ^, |, &
};
// Check
var correct = answer == operators[operand](term1, term2);
您必须包括异常处理,例如除以零 and/or 溢出。
我不知道您是否能够将 char 直接包含为运算符,但您可以这样做:
你可以改变
char[] operators = { '+', '-', '*', '/' };
char op = operators[random.Next(operators.Length)];
至:
char[] operators = { '+', '-', '*', '/' };
int randomOperator = random.Next(operators.Length)
char op = operators[randomOperator];
并改变
if (num1 + num2 == sum.Value)
return true;
else
return false;
至:
if (randomOperator == 0 && num1 + num2 == Answer)
return true;
else if (randomOperator == 1 && num1 - num2 == Answer)
return true;
else if (randomOperator == 2 && num1 * num2 == Answer)
return true;
else if (randomOperator == 3 && num2 != 0 && num1 / num2 == Answer)
return true;
else
return false
我希望你明白了。
public class MathPuzzle
{
public string Question { get; set; }
public double Answer { get; set; }
public void PrepareQuestion()
{
Random random = new Random();
int num1 = random.Next(0, 100);
char[] operators = { '+', '-', '*', '/' };
char op = operators[random.Next(operators.Length)];
int num2 = random.Next(0, 100);
switch (op)
{
case '+':
Answer = num1 + num2;
break;
case '-':
Answer = num1 - num2;
break;
case '*':
Answer = num1 * num2;
break;
case '/':
Answer = Math.Round((double)num1 / (double)num2, 2);
break;
}
Question = string.Format("{0} {1} {2}", num1, op, num2);
}
public bool CheckTheAnswer(double userProvidedAnswer)
{
return userProvidedAnswer == Answer;
}
}
将上面的 MathPuzzle class 用作
private MathPuzzle puzzle = new MathPuzzle();
private void QustionButton_Click(object sender, EventArgs e)
{
puzzle.PrepareQuestion();
QuestionLabel.Text = puzzle.Question;
}
private void CheckAnswerButton_Click(object sender, EventArgs e)
{
double userAnswer = double.Parse(AnswerTextBox.Text);
if (puzzle.CheckTheAnswer(userAnswer))
MessageBox.Show("Correct");
else
MessageBox.Show("Wrong");
}