我的程序需要:
一个。生成一个包含 20 个从 0 到 9 的随机整数的数组。搜索数字 7 的第一次出现(如果有),并报告它在数组中的位置。
重复a部分的计算1000次,对于数组中的每个位置,报告数组中第一次出现a 7 在该位置的次数
然而,每当我运行该程序时,我都会得到奇怪的结果(每次都不同),例如:
- 在任何位置都没有找到七人制
- 在一个位置发现了 1000 个七人制,在其他地方没有发现七人制
- 在 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/