首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机数和多个按钮c#

随机数和多个按钮c#
EN

Stack Overflow用户
提问于 2013-11-25 11:28:16
回答 4查看 2.9K关注 0票数 1

我对如何让这个程序做一些特定的事情感到困惑,还有一个问题供我自己将来参考:

问:你能用按钮做if语句吗例如: if (点击button1)这样做,否则if (button2被点击)这样做

我的程序的目标是帮助学习基本的整数数学,四个部分是加法,减法,乘法和模数。我有3个文本框,第一个是显示的问题,第二个是用户的答案,第三个是答案是否正确

我目前设置的内容:

代码语言:javascript
复制
        private void button1_Click(object sender, EventArgs e)
    {
        Random random1 = new Random();
        int randomNumber1 = random1.Next(6, 11);
        Random random2 = new Random();
        int randomNumber2 = random2.Next(1, 6);
        textBox1.Text = "What is " + randomNumber1 + " + " + randomNumber2 + " ?";
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Random random1 = new Random();
        int randomNumber1 = random1.Next(6, 11);
        Random random2 = new Random();
        int randomNumber2 = random2.Next(1, 6);
        textBox1.Text = "What is " + randomNumber1 + " - " + randomNumber2 + " ?";
    }

    private void button3_Click(object sender, EventArgs e)
    {
        Random random1 = new Random();
        int randomNumber1 = random1.Next(6, 11);
        Random random2 = new Random();
        int randomNumber2 = random2.Next(1, 6);
        textBox1.Text = "What is " + randomNumber1 + " * " + randomNumber2 + " ?";
    }

    private void button4_Click(object sender, EventArgs e)
    {
        Random random1 = new Random();
        int randomNumber1 = random1.Next(6, 11);
        Random random2 = new Random();
        int randomNumber2 = random2.Next(1, 6);
        textBox1.Text = "What is " + randomNumber1 + " % " + randomNumber2 + " ?";
    }

    private void button5_Click(object sender, EventArgs e)
    {
        Random random1 = new Random();
        int randomNumber1 = random1.Next(6, 11);
        Random random2 = new Random();
        int randomNumber2 = random2.Next(1, 6);




        if (Convert.ToInt16(textBox2.Text) == (randomNumber1) + (randomNumber2))
            textBox3.Text = "Correct!";
        else if (Convert.ToInt16(textBox2.Text) == (randomNumber1) - (randomNumber2))
            textBox3.Text = "Correct!";
        else if (Convert.ToInt16(textBox2.Text) == (randomNumber1) * (randomNumber2))
            textBox3.Text = "Correct!";
        else if (Convert.ToInt16(textBox2.Text) == (randomNumber1) % (randomNumber2))
            textBox3.Text = "Correct!";
        else
            textBox3.Text = "Incorrect!";



    }
}

}

我要做的是,如果你点击了按钮1,你点击了加法,点击了按钮2,你点击了减法,点击了按钮3,点击了乘法,点击了按钮4,点击了提交,它就会告诉你,你是否得到了正确的答案。我目前的答案在一定程度上做到了这一点,但如果答案是四种类型的问题中的任何一种,它就会显示为正确的。

例如:问题是8+3,你填5,它会说对,因为8-3等于5

EN

回答 4

Stack Overflow用户

发布于 2013-11-25 11:51:38

你可以尝试下面的代码,你的代码有相当多的东西是多余的,并且确定用户回答是否正确的检查机制是完全错误的:

代码语言:javascript
复制
public enum Operation {
  Add,
  Subtract,
  Divide,
  Multiply,
  Modulo
}
Random rand = new Random();
private decimal GenerateQuestion(Operation o){
  int a = rand.Next(6, 11);
  int b = rand.Next(1, 6);
  decimal result = 0;
  string os = "";
  switch(o){
    case Operation.Add:          
         result = a + b;
         os = "+";
         break;
    case Operation.Subtract:
         result = a - b;
         os = "-";
         break;
    case Operation.Multiply: 
         result = a * b;
         os = "*";
         break;
    case Operation.Divide:
         result = (decimal)a/b;
         os = "/";
         break;
    case Operation.Modulo:
         result = a % b;
         os = "%";
         break;
  }
  textBox1.Text = string.Format("What is {0} {1} {2}?", a,os,b);
  return result;
}
decimal result;    
private void button1_Click(object sender, EventArgs e)
{
   result = GenerateQuestion(Operation.Add);
}
private void button2_Click(object sender, EventArgs e){
   result = GenerateQuestion(Operation.Subtract);
}
private void button3_Click(object sender, EventArgs e){
   result = GenerateQuestion(Operation.Multiply);
}
private void button4_Click(object sender, EventArgs e){
   result = GenerateQuestion(Operation.Modulo); 
}
private void button5_Click(object sender, EventArgs e){
   decimal v;
   if(decimal.TryParse(textBox2.Text, out v)){
     textBox3.Text = (v == result) ? "Correct!" : "Incorrect!";
   }else {
     textBox3.Clear();
     MessageBox.Show("Enter a number please!");
   }
}
票数 2
EN

Stack Overflow用户

发布于 2013-11-25 11:39:27

您可以将一个事件处理程序分配给多个按钮,然后检查EventArgs以确定是哪个按钮触发了事件,并在其中放置了适当的条件逻辑。

不确定这是ASP.NET还是WinForms,但它的工作原理如下:

代码语言:javascript
复制
btn1.Click += button_Click;
btn2.Click += button_Click;
btn3.Click += button_Click;

 private void button_Click(object sender, EventArgs e)
 {
    var btn = sender as Button;
    if (sender != null) {
        if (btn is btn1) {
            //do something
        }
        else if (btn is btn2) {
            //do something
        }
        //etc
    }
 }

我已经以声明方式添加了事件处理程序,但您可以通过属性对话框或在标记中完成此操作。

票数 0
EN

Stack Overflow用户

发布于 2013-11-25 11:41:33

您正在生成随机(*)数字来创建问题,并再次验证问题。这是完全没有意义的,因为你有一些类似“3+4是什么”的东西,并且你将结果与7 + 2或其他一些随机值进行比较。

你应该将生成的值和操作保存在一些成员变量中以供验证,或者更简单地保存预期结果。

代码语言:javascript
复制
Random random = new Random();
int expectedResult;
private void button3_Click(object sender, EventArgs e)
{
    int randomNumber1 = random.Next(6, 11);
    int randomNumber2 = random.Next(1, 6);
    textBox1.Text = "What is " + randomNumber1 + " * " + randomNumber2 + " ?";
    expectedResult = randomNumber1 * randomNumber2;
}

private void button5_Click(object sender, EventArgs e)
{  
   textBox3.Text = 
     int.Parse(textBox2.Text) == expectedResult ? "Correct!" : "Incorrect!";
}

(*)请注意,由于每次调用时的代码重新启动序列,您当前的“随机”数字并不是完全随机的-因此成对的数字将非常密切地相关。请注意,为表达式生成的数字可能与为检查生成的数字不同。正确的用法是只有一个Random对象(可能是每个线程一个对象,但对于您的情况不需要担心)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20184258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档