我的计划需要:
一个.生成一个由0到9的20个随机整数的数组.搜索数字7的第一个匹配项(如果有),并在数组中报告其位置.
湾 重复计算部分a 1000次,并对数组中的每个位置报告数组中第一次出现7的位置在该位置的次数
但是每当我运行程序时,我都会得到奇怪的结果(每次都不同),例如:
有谁知道我的程序有什么问题?
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)
您的主要问题是每个searchForSevens()测试只需要一小部分时间,Random类使用时钟自动播种.然而,时钟具有有限的分辨率.结果是许多(有时是全部)随机序列都是相同的.最多只有2或3个不同的结果集.
这个单线程程序的简单修复是使用1个静态的Random实例.