在 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");
        }