骰子程序计算不正确
本文关键字:不正确 计算 子程序 | 更新日期: 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);