0

错误索引超出了数组的范围。程序是从数组中删除重复项我理解错误是第 32 行,在 for 循环的末尾创建了一个额外的元素,但我无法找到一种方法来显示没有重复项的整个数组。prog 要做的是将一个 5 数字输入到一个数组中,然后对它们进行排序,如果它们是重复的,则将其删除。我希望我说清楚了!

     using System;

     class duplicate 
     {
        static void Main() 
        {
            const int Array_Size = 5;
            int [] number = new int [Array_Size];
            int i;

    for ( i = 0; i < Array_Size; i++) 
    {
        number[i] = Int32.Parse(Console.ReadLine());
        if (number[i] < 9 || number[i] > 101)
        {
            Console.WriteLine("Enter Number between 10 - 100");
            number[i] = Int32.Parse(Console.ReadLine());
        }
    }

    Array.Sort(number);

    Console.WriteLine("Sorted Array : ");

    for (i = 0; i < Array_Size; i++)
    {
        Console.WriteLine("Element is " + number[i]);
    }

    Console.WriteLine("Duplicate Removed : ");

    for (i = 0; i < Array_Size; i++)
    { 
        if (number[i] != number[i+1])
            Console.WriteLine("Element is " + number[i]);
    }

    Console.ReadLine();
}

}

4

4 回答 4

2

异常发生在这一行:

if (number[i] != number[i+1])

在循环的最后一次迭代中,该行将解析为:

if(number[4] != number[5])

由于您的数组中只有 5 个项目并且是基于 0 的,因此number[5]会导致您的IndexOutOfRange异常。

如果您尝试将每个项目与其后的项目进行比较,只需不要检查最终迭代:

if(i != Array_Size && number[i] != number[i+1])

或者只循环到Array_Size - 1

for (i = 0; i < Array_Size - 1; i++)
于 2013-03-16T16:19:21.487 回答
1

您可以使用 LINQ 从数组中获取不同的值:

var distinct = number.Distinct().ToArray();

您需要using System.Linq;在文件之上才能使其正常工作。

并且说清楚:您的异常来自这里:

for (i = 0; i < Array_Size; i++)
{ 
    if (number[i] != number[i+1])
        Console.WriteLine("Element is " + number[i]);
}

何时i == Array_Size -1(这是最后一次通过)number[i+1]不存在。

于 2013-03-16T16:18:11.883 回答
0

当然 Linq 是今天要走的路,但你仍然可以使用老式循环

int prev = number[0];
Console.WriteLine("Element is " + prev);
for (int i = 1; i < Array_Size; i++)
{ 
    int cur = number[i];
    if (cur != prev)
    {
        Console.WriteLine("Element is " + cur);
        prev = cur;
    }
}
于 2013-03-16T16:24:41.943 回答
0

这种if说法根本不安全

for (i = 0; i < Array_Size; i++) {
   if (number[i] != number[i+1])
     ...

因此i,循环中的最终值不是数组的合法索引。要解决此问题,只需更改循环上的约束,使其始终是合法索引Array_Size - 1i + 1fori + 1

for (i = 0; i < Array_Size - 1; i++)
于 2013-03-16T16:19:50.833 回答