C# 销售佣金8.10迪特尔

C# 销售佣金8.10迪特尔,c#,C#,我不明白为什么我总是得到“索引超出范围” 数组的边界“错误”。我正在设法把工资汇总到 展示。 是否有人可以向我解释错误消息是如何工作的 namespace销售佣金{ 班级计划{ 静态void Main(字符串[]参数){ 常量int数组_长度=8; int[]工资={210400450950080304302332235906791000}; var salary=新整数[数组长度]; foreach(工资中的整数){ 试一试{ 如果(数字>=200&&number=300&&number=40

我不明白为什么我总是得到“索引超出范围” 数组的边界“错误”。我正在设法把工资汇总到 展示。 是否有人可以向我解释错误消息是如何工作的

namespace销售佣金{
班级计划{
静态void Main(字符串[]参数){
常量int数组_长度=8;
int[]工资={210400450950080304302332235906791000};
var salary=新整数[数组长度];
foreach(工资中的整数){
试一试{
如果(数字>=200&&number=300&&number=400&&number=500&&number=600&&number=700&&number=800&&number=900&&number=1000){
工资[8]++;
}
}捕获(IndexOutOfRangeException ex){
Console.WriteLine(例如消息);
Console.WriteLine($“salary[{number}]={salary[number]}”);
}
}

对于(var result=0;result您有9个薪级括号。200-299、300-399、400-499、500-599、600-699、700-799、800-899、900-999和>=1000。这意味着您需要9个存储空间进行计数。数组索引从0开始,因此数组长度需要为9,这就为您提供了[0到8]个索引

const int ARRAY_LENGTH = 8;    // This needs to be 9.
您得到的数组超出范围,因为:

} else if (number >= 1000) {
    salary[8]++;              // Index 8 doesn't exist, only [0 to 7] for an ARRAY_LENGTH of 8.
循环还访问数组边界之外的数据。这是因为循环的条件一直运行到并包含长度本身的索引。因此,如果数组有8个空格[0到7],则循环的运行范围为[0到8]当它访问索引8时,您就出界了。这很容易被修复,如下所示:-

for (var result = 0; result <= salary.Length; ++result) {  // Change this to result < salary.Length
    Console.WriteLine ($"{result* 100 + 200} - {result * 100 + 200 + 99 {salary[result],15}");
}

for(var result=0;result IMHO,看看如何使用
List
这会使它更干净、更易于维护,并且更容易执行您想要的操作。还有哪行会抛出错误?
索引超出了数组的界限
简而言之,您正在尝试访问一个不存在的索引(因此超出了界限)。无论如何,将
const int ARRAY_LENGTH=8;
更改为
const int ARRAY_LENGTH=9;
,然后将
更改为(var result=0;result
for (var result = 0; result <= salary.Length; ++result) {  // Change this to result < salary.Length
    Console.WriteLine ($"{result* 100 + 200} - {result * 100 + 200 + 99 {salary[result],15}");
}