2017-12-14 1 views
-5

私は以下のコードを持っています。私は整数のlistAを持っており、listAから逆の順序で整数を取る別のリストBを作成しました。しかし、コンパイルした後、私は "ArgumentOutOfRangeException"を取得します。私は私のインデックス作成が大丈夫だと思うので、なぜこれを得ているのかわかりません。intのリストを逆にする

 List<int> listNum = new List<int> { 1, 2, 3, 4 }; 
     listNum.Add(7); 

     List<int> reverseList = new List<int>(); 

     int k = 0; 
     int ListLength = listNum.Count-1; 

     for (int i = ListLength; i >= 0; i--) 
     { 
      reverseList[k] = listNum[i]; 
      k++; 
     } 
+4

'reverseList'がゼロのアイテムを持っています。ゼロ。なし。 * 'reverseList'へのインデックスは範囲外です。 –

+4

質問する前に、あなたはここで自分でデバッグする余裕があります。たとえば、 'k'と' i'と 'reverseList.Count'と' listNum.Count'を記録するforループにprintステートメントを置くと、あなた自身で100%問題を発見できるはずです。 –

+0

'listNum.Reverse()'を使うことができます。 'reverseList = listNum.ToList()'リストをコピーしてそれを反転させます: 'reverseList.Reverse()' –

答えて

3

直接法Enumerable.Reverseは、あなたのコードのための

listNum .Reverse() 

以下のように行うことができますがありますだけの情報については、この

for (int i = ListLength -1; i >= 0; i--) 
    reverseList.Add(listNum[i]); 

好きそれはListは、それが配列ではないのです

+1

Pranayの最終的なコメントの意味は、 'List'と' array'は別のものです。リストには最初に要素がありません。固定サイズの配列とは異なり、myList [3]でアクセスできる位置3には何もありません。あなたの配列が 'int [] [myArray = new int [5]'で宣言されている場合は、myArray [3]となります。 'List myList = new List(5)'と言うと、単に5つの項目の初期容量を持つリストを作成するだけですが、5つの項目はありません。それは0の項目があります。 'MyList [3]'を実行すると 'Add()'を5回呼び出すと5つの項目があり、クラッシュしません。 –

+1

@CaiusJard - gr8 C#の本を読む必要があり、セクション... :) –

+0

受け入れられた答えでマイナス1をする特別なケースがあります... –

1

これは、reverseListに0個の要素があるためです。 はループ reverseList[k].Add(listNum[i]);

や簡単な使用のLINQのためにあなたが下記行うことができます。この問題を解決するには

reverseList = listNum.Reverse();

関連する問題