错误:索引超出了数组的范围

时间:2019-05-10 11:58:16

标签: c# arrays

我收到此错误:

  

System.IndexOutOfRangeException:“索引在数组的边界之外。”

int a = 2;
int[] nt = new int[100], d = new int[100];
d[0] = nt[0] = 3;
d[1] = nt[1] = 5;
for (int i = 7; i < 100; i += a)
{
    for (int j = 0; nt[j] < i; j++)
    {
        if (d[j] != 0)
        {
            d[j]--;
        }
        else
        {
            d[j] = nt[j];
            //  -->error: nt[k]<i
            for (int k = j + 1; nt[k] < i; k++)

您能帮我解决代码吗?

1 个答案:

答案 0 :(得分:0)

最后一行缺少k的范围测试。如果没有nt[k]小于i,则k会超出范围,即最终会变得大于或等于100。

for (int k = j + 1; k < 100 && nt[k] < i; k++)

由于C#使用短路评估,所以测试k < 100 && nt[k] < i仅在第一部分nt[k] < ik < 100时评估第二部分true。这样可以防止访问索引大于或等于100的nt

另请参阅:


您代码中的

100魔术数字。为此声明一个常量。

const int N = 100;

int[] nt = new int[N];
...
for (int k = j + 1; k < N && nt[k] < i; k++)

但是我不知道您的代码的上下文。您可能会使用比N更好的名称。

请参阅:Writing Clean Code and Magic Numbers(C#角)。