繁体   English   中英

C# 减去 2 个字符串而不会得到负数

[英]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()创建一个实例,则该实例将使用从当前时间获取的种子进行初始化。 由于两次调用之间没有太多时间,因此两个实例可能使用相同的种子,并且您将再次获得相同的ab值。
我建议只创建一个实例并将其存储在类的成员变量中。

第二个问题:如果您的第一次尝试结果为负值c ,则您只能再试一次,但这并不能确保这次结果为正值。 更好的方法是比较ab ,如果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM