错误索引超出了数组的范围。 程序是从数组中删除重复项 我理解第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();
}
}
答案 0 :(得分: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++)
答案 1 :(得分: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]
不存在时。
答案 2 :(得分:0)
此if
声明根本不安全
for (i = 0; i < Array_Size; i++) {
if (number[i] != number[i+1])
...
循环中i
的最终值为Array_Size - 1
,因此i + 1
不是数组的合法索引。要解决此问题,只需更改for
循环上的约束,使i + 1
始终是合法索引
for (i = 0; i < Array_Size - 1; i++)
答案 3 :(得分: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;
}
}