0

エラーインデックスが配列の範囲外でした。プログラムは配列から重複を削除することです。forループの最後に余分な要素が作成される32行目というエラーを理解していますが、重複なしで配列全体を表示する方法を見つけることができません。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

この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 に答える
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 に答える