为什么在生成Random()数字时会得到奇怪的结果?

DFr*_*Fan 1 c# arrays random

我的计划需要:

一个.生成一个由0到9的20个随机整数的数组.搜索数字7的第一个匹配项(如果有),并在数组中报告其位置.

湾 重复计算部分a 1000次,并对数组中的每个位置报告数组中第一次出现7的位置在该位置的次数

但是每当我运行程序时,我都会得到奇怪的结果(每次都不同),例如:

  1. 在任何位置都没有发现任何七人制
  2. 在一个位置找到1000个七人制,在其他地方找不到七人制
  3. 在2个位置发现了数百个七人组,其他地方都找不到.

有谁知道我的程序有什么问题?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace Week_6_Project_2
    {
    class Program
    {

    static int intArrayLength = 20;
    static int[] resultsArray = new int[intArrayLength];

    public static Array generateRandomArray() {
        int[] randomNumberArray = new int[intArrayLength];
        Random random = new Random();
        int popcounter = 0;
        while (popcounter < intArrayLength) {
            randomNumberArray[popcounter] = random.Next(0, 10);
            popcounter += 1;
        }
        return randomNumberArray;
    }

    public static void searchForSevens()
    {
        int counter = 0;
        int[] randomArray = (int[])generateRandomArray();
        while (counter < intArrayLength)
        {
            if (randomArray[counter] == 7)
            {
                resultsArray[counter] += 1;
                counter = intArrayLength;
            }
            counter += 1;
        }
    }
    static void Main()
    {
        int searchCounter = 0;
        while (searchCounter < 1000)
        {
            searchForSevens();
            searchCounter += 1;
        }

        int displayCounter = 0;
        while (displayCounter < intArrayLength)
        {
            Console.WriteLine("Number of first occurrence of 7 at position {0} = {1}", displayCounter, resultsArray[displayCounter]);
            displayCounter += 1;
        }
        Console.ReadLine();

    }
    }
    }
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 6

您的主要问题是每个searchForSevens()测试只需要一小部分时间,Random类使用时钟自动播种.然而,时钟具有有限的分辨率.结果是许多(有时是全部)随机序列都是相同的.最多只有2或3个不同的结果集.

这个单线程程序的简单修复是使用1个静态的Random实例.

  • 谢谢!我删除了"Random random = new Random();" 来自"generateRandomArray();".然后我放置"静态随机随机=新的随机();" 与其他静态变量.该程序现在正常工作. (2认同)