我忙于游戏,需要在数组上的随机位置将数字放入2D数组中。我怎么能这样做?
我有
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
array[1 + rand() % row][1 + rand() % col] == 5;
}
}
运行时我的程序崩溃了。问题是什么?
答案 0 :(得分:3)
如评论中所述,数组从零开始,因此您生成的数字范围为[0,n-1]
。
此外,您正在比较而不是分配(请注意==
)
此外,使用更现代的随机生成器,它们不仅在产生正确的分布方面更好,而且更容易使用(不再算术)。例如,对于C++11's random,您将拥有以下内容(对于pre-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'次,只需从0
循环到N
(N
即可rows*cols
)
答案 1 :(得分:1)
array[1 + rand() % row][1 + rand() % col]
不正确,因为第一个元素位于0位,而不是1。
尝试array[rand() % row][ rand() % col]
编辑:
rand() % n
会将0
的数字返回给n-1
。在您添加1的情况下,可以尝试访问位置row
或col
的元素,这些元素不是有效索引。即使你写了
array[1 + rand() % (row-1)][1 + rand() % (col-1)]
它不是真正随机的,因为永远不会触及第一行和第一列。