c# - 销售佣金 8.10 Dietel
问题描述
我无法弄清楚为什么我不断收到“索引超出数组范围”错误。我正在尝试计算要显示的薪水。有没有人可以向我解释错误消息是如何工作的。
namespace sales_commission {
class Program {
static void Main (string[] args) {
const int ARRAY_LENGTH = 8;
int[] salaries = { 210, 400, 450, 950, 800, 330, 430, 233, 223, 590, 679, 1000 };
var salary = new int[ARRAY_LENGTH];
foreach(int number in salaries) {
try {
if (number >= 200 && number <= 299) {
salary[0]++;
} else if (number >= 300 && number <= 399) {
salary[1]++;
} else if (number >= 400 && number <= 499) {
salary[2]++;
} else if (number >= 500 && number <= 599) {
salary[3]++;
} else if (number >= 600 && number <= 699) {
salary[4]++;
} else if (number >= 700 && number <= 799) {
salary[5]++;
} else if (number >= 800 && number <= 899) {
salary[6]++;
} else if (number >= 900 && number <= 999) {
salary[7]++;
} else if (number >= 1000) {
salary[8]++;
}
} catch (IndexOutOfRangeException ex) {
Console.WriteLine (ex.Message);
Console.WriteLine ($"salaries[{number}] = {salary[number]}");
}
}
for (var result = 0; result <= salary.Length; ++result) {
Console.WriteLine ($"{result* 100 + 200} - {result * 100 + 200 + 99} {salary[result],15}");
}
}
}
}
解决方案
你有 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}");
}
推荐阅读
- javascript - 粘性侧边栏手风琴不会正确滚动
- javascript - JavaScript:XMLHttpRequest 状态总是返回 0
- c# - 无法执行操作,因为运行空间未处于“打开”状态。运行空间的当前状态是“破碎”
- input - 无法从异步中的标准输入读取文件
- sql - 将多个分区读入一个数据帧/rdd
- asp.net - 使用 vba 从 aspx 搜索查询中下载 tif 文件
- mongodb - 如何使用 pymongo 将整个 MongoDB 数据库导出到 .csv 文件?
- firebase - 使用 curl 创建时 Firebase 动态链接内部错误
- javascript - CAML 输出从 DateTime 中删除时间
- react-dates - 主题反应日期不起作用