错误未处理异常: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++)
这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++)
如果我使用(i = 0; i
我该如何解决它? – user1905501 2013-03-16 16:23:18
@ user1905501:看我编辑 – goric 2013-03-16 16:25:53