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

标签 c# arrays random

我的程序需要:

一个。生成一个包含 20 个从 0 到 9 的随机整数的数组。搜索数字 7 的第一次出现(如果有),并报告它在数组中的位置。

重复a部分的计算1000次,对于数组中的每个位置,报告数组中第一次出现a 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();

    }
    }
    }

最佳答案

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

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

关于c# - 为什么我在生成 Random() 数字时会得到奇怪的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19072067/

相关文章:

c# - 有没有更好的方法来删除 span 元素但保留子节点?

c#屏幕共享效率

python - 如何有效地将 X 模 Y 添加到 numpy 数组中的每个元素?

arrays - 在 F# 中使用相同的键映射多个元素

c++ - 解释频率[toupper(new_letter) - 'A' ]++;

java - 数字太长无法传递给 Random()?

java - 为每个数组值生成一个唯一的随机数

c# - AutoMapper - 在没有 `set;` 实现的情况下映射属性

c - 在 Linux 上用 C 获取每次引导随机种子的可移植方法

c# - 错误:类型为Image <TColor,TDepth >' exists in both ' Emgu.CV.World,版本= 3.3.0.2824和Emgu.CV,版本= 2.2.1.1150