2 回答
TA贡献1817条经验 获得超6个赞
我不确定你为排序做了什么逻辑,但我知道你为什么索引超出范围错误。
代码错误
您正在创建 10 个存储桶,现在您正在尝试通过将当前值或数组乘以 10 来生成存储桶编号。
例如,如果您当前的数组值为 2,则生成的存储桶编号将为 20。您只有 10 个存储桶,因此Scatter()方法会给您错误。
private static void Scatter(int[] array, List<List<int>> buckets)
{
foreach (int value in array)
{
int bucketNumber = GetBucketNumber(value);
buckets[bucketNumber].Add(value); // ERROR HERE
}
}
解决方案
其实GetBucketNumber()方法有问题。您应该使用余数而不是乘法。更改方法如下。
private static int GetBucketNumber(int value)
{
int val = value % 10;
return val;
}
你必须做
在寻求帮助之前,请尝试通过艰苦的尝试来解决您的问题。首先在纸上运行你的程序我的意思是在你开始编码之前确认你的逻辑。相信你,并给你足够的时间去尝试。享受编码。
TA贡献1835条经验 获得超7个赞
在我回答之前,我想强烈建议您在寻求外部帮助之前始终先真诚地尝试解决问题。我不一定认为您没有尝试过,但是通过逐步调试调试器可以轻松识别此问题。
如果这是您不太熟悉的编码方面,我强烈建议将其作为学习的优先事项 - 从长远来看,它只会使您成为更好的开发人员。
此时方法中出现问题Scatter
:
int bucketNumber = GetBucketNumber(value);
buckets[bucketNumber].Add(value);
发生异常是因为GetBucketNumber
将输入乘以 10,但您使用的是乘以的值作为 的索引buckets
。
- 2 回答
- 0 关注
- 187 浏览
添加回答
举报