我正忙于玩游戏,需要在数组上的随机位置将一个数字放入二维数组中。我怎样才能做到这一点?
我有
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
array[1 + rand() % row][1 + rand() % col] == 5;
}
}
我的程序在运行时崩溃。问题可能是什么?
我正忙于玩游戏,需要在数组上的随机位置将一个数字放入二维数组中。我怎样才能做到这一点?
我有
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
array[1 + rand() % row][1 + rand() % col] == 5;
}
}
我的程序在运行时崩溃。问题可能是什么?
正如评论中所说,数组是从零开始的,因此您生成了 range 中的数字[0,n-1]
。
此外,您是在比较而不是分配(注意==
)
此外,使用更现代的随机生成器,它们不仅在产生正确分布的意义上更好,而且更易于使用(不再需要算术摆弄)。例如,使用C++11 的 random,您将拥有以下内容(这也可以通过c++03 之前的boost来实现):
std::mt19937 gen(std::random_device{}());
std::uniform_int_distribution<> disRows(0, rows-1);
std::uniform_int_distribution<> disCOls(0, cols-1);
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
array[disRows(gen)][disCols(gen)] = 5;
}
}
此外,双循环在这里没有多大意义,如果你想随机分配 5 'N' 次,只需循环 from 0
to N
(N
可能是rows*cols
)
array[1 + rand() % row][1 + rand() % col]
不正确,因为第一个元素位于位置 0,而不是 1。
尝试array[rand() % row][ rand() % col]
编辑:
从到rand() % n
返回数字。在您的情况下,添加 1 可以尝试访问位置or的元素,这些元素不是有效的索引。即使你写了0
n-1
row
col
array[1 + rand() % (row-1)][1 + rand() % (col-1)]
它不是真正随机的,因为第一行和第一列都不会被触及。