2012-05-03 118 views
-4

我忙於一款遊戲,需要將數字放入陣列中隨機位置的二維數組中。我怎樣才能做到這一點?C++隨機生成的數字

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

我的程序崩潰,當我運行它。問題是什麼?

+4

顯示'array'的聲明。 – ildjarn

+6

數組基於0而不是1。 –

+3

另外,您正在使用'=='而不是賦值'='這只是一個錯字,或者這是您的真實代碼? –

回答

1

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

不正確,因爲第一元件是在位置0,而不是1

嘗試array[rand() % row][ rand() % col]

編輯:從0 rand() % n返回號碼n-1。在你的情況下,加1可以嘗試訪問rowcol這些不是有效索引的元素。而且,即使你寫

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

而不是像第一行和第一列將永遠不會被感動都真正隨機的。

+0

問題是如何將數值5放置在數組中的隨機位置。 –

+0

如果'rand()%row'返回'row-1',那麼'1 + rand()%row'是'row',這是無界的。 – UmNyobe

+0

是的,我得到了它,它不會給我錯誤,現在它不顯示在數組中的5 –

3

正如在評論中所說的,數組是基於零的,因此您已經生成了數字,範圍爲[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'次,從0NN可能是rows*cols

+0

:我覺得我應該也是... – UmNyobe