骰子程序计算不正确

本文关键字:不正确 计算 子程序 | 更新日期: 2023-09-27 18:36:35

我正在尝试制作一个骰子程序。因此,当您单击掷骰子时,它应该掷两个骰子并添加总和,这就是您掷出的数字。我需要有关此窗口表单程序的一些帮助。下面是一些代码:

private int totalRolls;
private void btnRoll_Click(object sender, EventArgs e)
{
    totalRolls += 1;
    System.Random Int1 = new System.Random((int)System.DateTime.Now.Ticks);
    System.Random Int2 = new System.Random((int)System.DateTime.Now.Ticks);
    int randomInteger1 = Int1.Next(1, 7);
    int randomInteger2 = Int2.Next(1, 7);
    lblNumberRolled.Text = randomInteger1.ToString() + randomInteger2.ToString();

我认为lblNumberRolled.Text的代码是不对的。这是将两个骰子相加以获得最终骰子总数的代码。但是当我运行它时,它会显示像 30 之类的大数字。它不是添加什么的。

最高总和应为 12。

骰子程序计算不正确

将代码更改为:

lblNumberRolled.Text = (randomInteger1 + randomInteger2).ToString();

解释:

randomInteger1.ToString() +  randomInteger2.ToString() 

当 randomInteger1 为 2 时,你制作一个字符串,它将是"2" + 当 randominterger2 是 1 之后的字符串它是"1"。当你将这些字符串与 + 连接时,你会做"2" + "1",那是 21 而不是 3。

您的代码还有另一个问题:Ticks 对象的类型为 long,您将其强制转换为 int。所以你丢失了信息。这导致您将在大多数情况下为两个整数获得相同的种子。这导致您将在大多数情况下获得相同的随机整数。

在随机调用之间放置一个 Thread.Sleep(20) 可以修复它:

System.Random Int1 = new System.Random((int)System.DateTime.Now.Ticks);
Thread.Sleep(20);
System.Random Int2 = new System.Random((int)System.DateTime.Now.Ticks);

这是因为您使用 + 表示字符串。当您将"+"与字符串一起使用时,编译器不会将其视为数学运算而不是串联运算符。

尝试以下操作

而不是

lblNumberRolled.Text = randomInteger1.ToString() + randomInteger2.ToString();

尝试

lblNumberRolled.Text = Convert.ToString(randomInteger1+randomInteger2);
你可以

这样做:

Label lb = new Label();
Random random = new Random();
int ranNum1 = random.Next(1, 7); // random num 1-6
int ranNum2 = random.Next(1, 7); // random num 1-6
lb.Text = Convert.ToString(ranNum1 + ranNum2);
Form.Controls.Add(lb);

这意味着你想要这样的东西:

Random random = new Random();
randomInteger1 = random.Next(1,7);
randomInteger2 = random.Next(1,7);
lblNumberRolled.Text = Convert.ToString(randomInteger1 +randomInteger2);