C# 数组和 Random.NextDouble() 的奇怪行为
本文关键字:数组 Random NextDouble | 更新日期: 2023-09-27 18:33:57
我在main()
方法中有以下代码:
const int Length = 20;
const int NumberOfExperiments = 100;
static void Main(string[] args)
{
Random gen = new Random();
double[][] arr = new double[NumberOfExperiments][];
for (int j = 0; j < NumberOfExperiments; ++j)
{
arr[j] = new double[Length + 4];
for (int i = 0; i < Length; ++i)
{
arr[j][i] = gen.NextDouble();
}
arr[j][Length] = bubbleSort(arr[j]);
arr[j][Length + 1] = insertSort(arr[j]);
arr[j][Length + 2] = arr[j][Length] - arr[j][Length + 1];
arr[j][Length + 3] = arr[j][Length + 2] * arr[j][Length + 2];
foreach(double memb in arr[j]){
Console.WriteLine("{0}", memb);
}
Console.ReadKey();
}
WriteExcel(arr, "sorting");
Console.ReadKey();
}
在第一个 ReadKey() 之后,我有以下输出:
0
0
0 0 0.046667384
0.178001223
0.197902503
0.206131403
0.24464349
0.306212793
0.307806501
0.354127458
0.385836004
0.389128544
0.431109518
0.489858235
0.530548627
0.558604611
0.647516463
0.762527595
0.874646365
152 -151.1253536
22838.87251
我不知道为什么数组的前几个元素用 0 填充。第一次迭代总是以 i=0
(或 j=0
)开头,所以没关系。函数bubbleSort()
和insertSort()
正常工作并返回交换次数。我已经使用 C# 好几年了,但我真的不明白为什么这段代码不起作用。
创建"行"时,执行以下操作:
arr[j] = new double[Length + 4];
但随后像这样循环:
for (int i = 0; i < Length; ++i)
因此,最后 4 个元素保留默认值 (0)。排序时,这些元素将转到开头。
看起来 bubbleSort() 获取一个数组并对其进行排序,在调用时,最后 4 个元素为空(设置为 0),因此它们转到结果的开头。检查 bubbleSort() 是否在某处使用 Array.Length,并确保它在那里减去 4。