我正在尝试生成两个随机数数组。一个数组表示文本艺术鱼缸的高度,另一个数组则表示宽度。但是数组总是有相同的重复数。
例如:[2,2,2,2]或[9,9,9]
我一定是错误地设置了循环,但我需要帮助看看哪里出了问题。
//Generate random numbers for fish positions in vector
if ( fish_collection.size() != 0 )
{
int randHeight[fish_collection.size()];
int randWidth[fish_collection.size()];
for ( int i = 0; i < fish_collection.size(); i++ )
{
srand (time(NULL));
randHeight[i] = rand() % 10 + 1;
randWidth[i] = rand() % (tank_size - 5) + 1;
}
//random number printed test
for ( int i = 0; i < fish_collection.size(); i++ )
{
cout << randWidth[i] << ',';
}
cout << endl;
//Enter the fish in random position
for ( int j = 0; j < fish_collection.size(); j++ )
{
tank_frame[randHeight[j]].replace ( randWidth[j], fish_collection[j].size(), fish_collection[j] );
}
}
在程序中只需要调用srand(time(NULL))
一次(通常在main的开头)。
不止一次调用它,我相信会重置整个序列,这解释了为什么每次都会得到相同的号码(第一个)。(你总是接到相同的第一个电话的原因是,很可能电话离得很近,时间也一样)。
"time(NULL)"返回自1970年1月1日00:00以来的秒数,这解释了为什么"srand(time(NULL。(请参阅此链接)
每次调用rand()
函数时都会调用srand()
。这是不正确的:srand()
应该在程序开始时只使用一次,因为您传递给它的值设置了rand()
值的整个序列。在本例中,您总是使用相同的参数调用srand()
(因为时间不经常更新),因此rand()
序列总是相同的,因此对rand()
的调用总是返回相同的值。