gpt4 book ai didi

c# - 无法让数组元素正确显示 C#

转载 作者:太空狗 更新时间:2023-10-29 20:17:02 24 4
gpt4 key购买 nike

我正在为学校做一个小作业,但遇到了一些麻烦。该程序的目的是总结 2 个随机数的滚动 36000 次。数字应在 1-6 范围内(模拟骰子)。

然后我们将计算每个求和值的频率并将其显示到控制台。

除了我在运行程序时得到异常输出外,看起来很简单。当我在调试中运行程序时,它工作正常,所以我有点难过如何找到问题...

我正在使用一个计数器数组来计算一个值被滚动了多少次。我得到的输出看起来像这样:5888 0 6045 0 6052 0 5969 0 6010 0 6036(每个值都在一个换行符上我只是这样输入以节省空间)

当我运行调试 (F11),然后在单步执行后按 F5,我得到了所需的输出:
973 2022 3044 3990 4984 6061 4997 4030 2977 1954 968

using System;

public class DiceRollUI
{

public static void Main(string[] args)
{
DiceRoll rollDice = new DiceRoll();
Random dice1 = new Random(); //dice 1
Random dice2 = new Random(); //dice 2

int len = 36000;
while( len > 0) {

rollDice.DiceRange((uint)dice1.Next(1, 7) +
(uint)dice2.Next(1,7)); //sum the dice and pass value to array

--len;
}

rollDice.DisplayRange(); //display contents of counter array
Console.ReadLine();
}//end Main method

}//end class DiceRollUI

using System;

public class DiceRoll
{
private uint[] rolledDice = new uint[11]; //counter array to count number of rolls

public void DiceRange(uint diceValue)
{
++rolledDice[diceValue - 2]; //offset values to place in correct element
}//end method DiceRange

public void DisplayRange()
{
for(int i = 0; i < rolledDice.Length; i++)
Console.WriteLine("{0}", rolledDice[i]);

}//end method DisplayRange

}//end class RollDice

最佳答案

这是因为 Random() 构造函数的工作方式。基于MSDN :

By default, the parameterless constructor of the Random class uses the system clock to generate its seed value, while its parameterized constructor can take an Int32 value based on the number of ticks in the current time. However, because the clock has finite resolution, using the parameterless constructor to create different Random objects in close succession creates random number generators that produce identical sequences of random numbers.

所以你的两个 Random 实例实际上每次都生成相同的数字。

一个解决方案是对两次掷骰子只使用一个 Random 实例,因为您实际上并不需要其中的 2 个。

Random dice = new Random();                    

int len = 36000;
while (len > 0)
{
rollDice.DiceRange((uint) dice.Next(1, 7) +
(uint) dice.Next(1, 7)); //sum the dice and pass value to array

--len;
}

关于c# - 无法让数组元素正确显示 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22057781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com