我的代码需要一些帮助。 我必须通过减法制作数学游戏而不会得到否定但我的代码似乎不起作用。
int c = a - b;
if (c < 0)
{
Random ro = new Random();
a = ro.Next(10) + 1;
b = ro.Next(10) + 1;
lb_getal1.Text = a.ToString();
lb_getal2.Text = b.ToString();
}
if (txt_antwoord.Text == c.ToString())
{
MessageBox.Show("You provided the right answer!");
score += 1;
Random r = new Random();
a = r.Next(10) + 1;
b = r.Next(10) + 1;
lb_getal1.Text = a.ToString();
lb_getal2.Text = b.ToString();
}
else
{
MessageBox.Show("You were wrong!");
}
if (score == 5)
{
MessageBox.Show("You answered 5 answers correctly! Well done!");
this.Close();
RM_menu form = new RM_menu();
form.Show();
}
答案 0 :(得分:3)
您的代码中存在几个问题。首先要改进的是:只使用Random
的一个实例。
Random
类从列表中提供伪随机数。如果使用默认构造函数new Random()
创建实例,则使用从当前时间获取的种子初始化实例。由于两次调用之间没有太多时间,因此两个实例可能都使用相同的种子,您将再次获得a
和b
的相同值。
我建议只创建一个实例并将其存储在类的成员变量中。
第二个问题:如果您的第一次尝试导致结果为c
,那么您只需再次尝试一次,但这并不能确保这次是积极的。更好的方法是比较a
和b
,并切换b
是否更大。
所以你的代码看起来像这样:
public class YourGame : Form // I guess it's a Form
{
private Random randomGenerator = new Random();
private int a;
private int b;
private int score;
public void CreateQuestion()
{
a = randomGenerator.Next(10) + 1;
b = randomGenerator .Next(10) + 1;
if (b > a)
{
// switch values
int tmp = b;
b = a;
a = tmp;
}
lb_getal1.Text = a.ToString();
lb_getal2.Text = b.ToString();
}
private void OnAnswer()
{
int c = a - b; // will never be negative as we checked a and b above
if (txt_antwoord.Text == c.ToString())
{
MessageBox.Show("You provided the right answer!");
score += 1;
CreateQuestion();
}
else
MessageBox.Show("You were wrong!");
if (score == 5)
{
MessageBox.Show("You answered 5 answers correctly! Well done!");
this.Close();
RM_menu form = new RM_menu();
form.Show();
}
}
}
答案 1 :(得分:1)
我不是试图解决这个问题,而是尝试给出一些关于如何确保在使用Random
时该值不会小于零的输入。
int a, b, c;
Random ro;
ro = new Random();
b = ro.Next(10);
a = ro.Next(b, 10);
c = a - b;
如您所见,首先我们使用b
将随机值设置为ro.Next(10)
,然后使用ro.Next(b, 10)
这样做,保证在执行a-b
时该值不会小于零。
答案 2 :(得分:0)
您可以使用Math.Abs
int c = Math.Abs (a-b);