我的随机数生成器不会在循环C#中创建新值
本文关键字:创建 新值 循环 随机数生成器 我的 | 更新日期: 2023-09-27 18:29:48
我正在使用c#尝试用随机数填充数据网格视图,但由于某种原因,我在所有单元格中都得到了相同的值。
public int GenerateRandomNumber()
{
const int minimumNumber = -9;
const int maximumNumber = 15;
var random = new Random();
var randomNumber = random.Next(minimumNumber, maximumNumber);
return randomNumber;
}
gameBoard是数据网格视图。
private void populateButton_Click(object sender, EventArgs e)
{
CreateGameBoard((int)columnsNumericUpDown.Value,(int)rowsNumericUpDown.Value);
gameBoard.RowTemplate.Height = gameBoard.Height/gameBoard.RowCount;
foreach (DataGridViewRow row in gameBoard.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
cell.Value = GenerateRandomNumber();
}
}
}
不要重新创建随机生成器:
// Random generator, one instance for the loop, no re-creation
private m_Random = new Random();
...
public int GenerateRandomNumber()
{
const int minimumNumber = -9;
const int maximumNumber = 15;
// Do not re-create random generator! Use single instance instead
//var random = new Random();
var randomNumber = m_Random.Next(minimumNumber, maximumNumber);
return randomNumber;
}
Random是使用时钟初始化的,这意味着您将多次获得相同的值。
因此,与其重新创建Random实例,不如保留一个Random实例并在同一实例上继续使用Next。如果你有多个线程,那么你应该阅读这篇锁定解决方案
这正是你所需要的。
private Random random = new Random();
const int minimumNumber = -9;
const int maximumNumber = 15;
public int GenerateRandomNumber()
{
var randomNumber = random.Next(minimumNumber, maximumNumber);
return randomNumber;
}