2016-02-23 109 views
0

我不斷在我的for-each循環中得到一個異常,我不明白爲什麼。「索引超出了數組邊界」在c#中。爲什麼?

錯誤消失時,我讓array[i]等於i,但是如果我想它等於一個不同的價值?

相關代碼:

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] array1 = new int[5]; 

      for (int i = 0; i < 5; i++) 
      { 
       array1[i] = (i + 1); 
      } 


      foreach (int value in array1) 
      { 
       Console.Write(array1[value]); 
      } 

      Console.ReadKey(); 

     } 
    } 
} 
+2

,因爲你將5放入array1 [4],然後將其取出並嘗試使用它訪問array1 [5]。你只能索引0..4 –

+0

然後'foreach'然後使用'array [value]'是不正確的。在'array1'上使用'foreach','value'將是數組中的每個元素。 – crashmstr

+2

再次用'for(i = 0; i <5; i ++)'替換'foreach ...'這一行,或者用'Console.Write(value)'替換'Console.Write(array [value])' –

回答

5

與foreach循環的問題是你使用值作爲數組的索引,而不是簡單地打印值。

你的代碼更改爲:

Console.Write(value); 

,它應該工作。

0

在這條線,你標註有五行,0-4數組:

int[] array1 = new int[5]; // elements 0, 1, 2, 3, 4 

然後你循環在你的第一個五次「for」循環,並設置每個元素等於指數加一:1,2,3,4,5。在下一個「for」循環中,你試圖通過它們的值訪問同一個數組的元素,但是當你到達最後一個元素的值爲5時,它失敗因爲沒有索引5.請記住,只有索引0到4.

+0

0到4這是5個元素。我有一種感覺,你知道這一點,並犯了一個愚蠢的錯誤 –

+0

@JoePhilllips - 當然:) –

1
foreach (**int** value in array1) 
{ 
    Console.Write(**array1[value]**); 
} 

取而代之:

foreach (var value in array1) 
{ 
    Console.Write(value); 
} 
1

您正在將i+1分配給數組元素值並嘗試使用此值訪問數組。

 int[] array1 = new int[5]; 

     for (int i = 0; i < 5; i++) 
     { 
      array1[i] = (i + 1); 
     } 
在上面的代碼

array1[0]=1 
    array1[1]=2 
    array1[2]=3 
    array1[3]=4 
    array1[4]=5 

array1[4]值爲5

現在在foreach循環你正在試圖在其引發索引超出結合的例外

的位置5即 array1[5]訪問陣列
相關問題