随机编号的数组给出相同的数字

Random numbered array gives the same number

本文关键字:数字 编号 数组 随机      更新时间:2023-10-16

我正在尝试生成两个随机数数组。一个数组表示文本艺术鱼缸的高度,另一个数组则表示宽度。但是数组总是有相同的重复数。

例如:[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()的调用总是返回相同的值。