-4

我正忙于玩游戏,需要在数组上的随机位置将一个数字放入二维数组中。我怎样才能做到这一点?

我有

for(int i = 0; i < rows; i++)
{
   for(int j = 0; j < cols; j++)
   {
      array[1 + rand() % row][1 + rand() % col] == 5;
   }
}

我的程序在运行时崩溃。问题可能是什么?

4

2 回答 2

3

正如评论中所说,数组是从零开始的,因此您生成了 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 0to N(N可能是rows*cols)

于 2012-05-03T19:22:51.407 回答
1

array[1 + rand() % row][1 + rand() % col]

不正确,因为第一个元素位于位置 0,而不是 1。

尝试array[rand() % row][ rand() % col]

编辑: 从到rand() % n返回数字。在您的情况下,添加 1 可以尝试访问位置or的元素,这些元素不是有效的索引。即使你写了0n-1rowcol

array[1 + rand() % (row-1)][1 + rand() % (col-1)]

它不是真正随机的,因为第一行和第一列都不会被触及。

于 2012-05-03T19:13:09.687 回答