c# - 骰子程序计算不正确?

标签 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。

最佳答案

将您的代码更改为:

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

解释:

randomInteger1.ToString() +  randomInteger2.ToString() 

当 randomInteger1 为 2 时,您将其制成一个字符串,它将为“2”+ 当 randominterger2 为 1 时,在 String 之后为“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);

关于c# - 骰子程序计算不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19557736/

相关文章:

c# - Linq any - 如何选择

c# - 如何使用 google-diff-match-patch C# 库?

java - 具有给定长度单元测试的随机字符串

java - 使用随机数生成器记录数字出现的次数。 java

c# - 我需要在发布 exe 文件时在每个 dll 中启用 ReadyToRun 吗?

c# - NUnit 无法找到程序集,但控制台应用程序可以

java - 如何随机执行一段代码并统计次数?

r - 在向量中生成随机长度的 NA 随机序列

不包括一个变量的Python随机数

c# - 以 .NET 2.0 为目标时使用(某些)lambda 表达式?