错误未处理异常:System.IndexOutOfRangeException?

问题描述:

错误索引超出了数组的范围。 程序是从数组中删除重复项 我知道错误,那是在for循环结尾创建一个额外的元素的第32行,但我无法找出一种方法来显示整个数组没有重复。编程假设要做的是在数组中输入一个5的数字,然后对它们进行排序,如果它们是重复的,则将其删除。 我希望我明白!错误未处理异常:System.IndexOutOfRangeException?

 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(); 
} 

}

当然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; 
    } 
} 

您可以使用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]不存在。

唯一的例外是在该行发生的事情:

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++) 
+0

我该如何解决它? – user1905501 2013-03-16 16:23:18

+0

@ user1905501:看我编辑 – goric 2013-03-16 16:25:53

if声明是简单的不安全

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

最终值o f i在循环中将为Array_Size - 1因此i + 1不是数组的合法索引。为了解决这个问题只需要改变约束的for循环,使得i + 1始终是一个合法的指数

for (i = 0; i < Array_Size - 1; i++) 
+0

如果我使用(i = 0; i user1905501 2013-03-16 16:23:57