我忙於一款遊戲,需要將數字放入陣列中隨機位置的二維數組中。我怎樣才能做到這一點?C++隨機生成的數字
我
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
array[1 + rand() % row][1 + rand() % col] == 5;
}
}
我的程序崩潰,當我運行它。問題是什麼?
我忙於一款遊戲,需要將數字放入陣列中隨機位置的二維數組中。我怎樣才能做到這一點?C++隨機生成的數字
我
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
array[1 + rand() % row][1 + rand() % col] == 5;
}
}
我的程序崩潰,當我運行它。問題是什麼?
array[1 + rand() % row][1 + rand() % col]
不正確,因爲第一元件是在位置0,而不是1
嘗試array[rand() % row][ rand() % col]
編輯:從0
rand() % n
返回號碼n-1
。在你的情況下,加1可以嘗試訪問row
或col
這些不是有效索引的元素。而且,即使你寫
array[1 + rand() % (row-1)][1 + rand() % (col-1)]
而不是像第一行和第一列將永遠不會被感動都真正隨機的。
問題是如何將數值5放置在數組中的隨機位置。 –
如果'rand()%row'返回'row-1',那麼'1 + rand()%row'是'row',這是無界的。 – UmNyobe
是的,我得到了它,它不會給我錯誤,現在它不顯示在數組中的5 –
正如在評論中所說的,數組是基於零的,因此您已經生成了數字,範圍爲[0,n-1]
。
此外,你反而比較分配的(注意==
)
此外,使用更現代化的隨機生成,他們不僅生產正確分佈的感覺更好,但也有很多更容易使用(不需要更多的算術小提琴)。例如,對於C++11's random,您將有以下(這也可以用boost實現預C++ 03):
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
)
:我覺得我應該也是... – UmNyobe
顯示'array'的聲明。 – ildjarn
數組基於0而不是1。 –
另外,您正在使用'=='而不是賦值'='這只是一個錯字,或者這是您的真實代碼? –