骰子程序计算不正确?

时间:2013-10-24 05:33:44

标签: c# random

我正在尝试制作一个骰子程序。因此,当您点击滚动时,它应该滚动两个骰子并添加总和,这就是您滚动的数字。我需要一些Windows窗体程序的帮助。这是一些代码:

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。

3 个答案:

答案 0 :(得分:4)

将您的代码更改为:

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

说明:

randomInteger1.ToString() +  randomInteger2.ToString() 

当randomInteger1为2时,你创建一个字符串,当randominterger2为1后,它将为“2”+,字符串为“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);

答案 1 :(得分:2)

这是因为您使用+作为字符串。当你对字符串使用'+'时,编译器认为它不是数学运算而不是连接运算符。

尝试以下

而不是

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

尝试

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

答案 2 :(得分:0)

你可以这样做:

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);