[英]C# substract 2 strings without getting negatives
我的代码需要一些帮助。 我必须用减法做一个数学游戏而不会得到负数,但我的代码似乎不起作用。
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();
}
您的代码中有几个问题。 首先要改进的是:只使用一个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();
}
}
}
我不是要解决这个问题,而是要提供一些关于如何确保在使用Random
时该值不小于零的输入。
int a, b, c;
Random ro;
ro = new Random();
b = ro.Next(10);
a = ro.Next(b, 10);
c = a - b;
如您所见,首先我们使用ro.Next(10)
为b
设置一个随机值,然后使用ro.Next(b, 10)
指定一个最小值
这样做可以保证在执行ab
时该值不会小于零。
你可以使用Math.Abs
int c = Math.Abs (a-b);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.