2011-12-15 120 views
-2

我有一個循環這樣C#循環[索引超出範圍]

int numberofelements=20; 

for(int i=0;i<numberofelements;i++) 
      { 

       if(i==numberofelements) 
       { 
        break; 
       } 

       if(i==i+1)) 
       { 
        //do some thing 

       }else 
       { 
        //do some thing else 

       } 

     } 

可以明顯看出這給出了列表的最後一個元素的運行時異常:Index was out of range. Must be non-negative and less than the size of the collection.

如何處理這在此列表的最後一個元素上不檢查條件i==i+1

+0

我想`我== numberofelements - 1`,也`我== numberofelements`贏得」自從你循環訪問` V4Vendetta 2011-12-15 05:33:37

+0

你不能只是做'我<= numberofelements`嗎? – DMan 2011-12-15 05:34:17

回答

1

爲什麼不能做到以下幾點:

for (int i = 0; i < numberofelements - 1; i++) 
{ 
    // do something 
} 

// do something else with numberofelements - 1 
0

看來你是循環是正確的20個元素

for(int i=0;i<numberofelements;i++) 

但最後一個元素,你需要檢查i == numberofelements - 1這將是指數19

而且不需要

if(i==numberofelements) 
{ 
    break; 
} 

因爲我永遠不會等於numberofelements這是20

3

這似乎是你想要得到一個包含少於20個元素的列表的Elemrnt,你將不得不展示更多的代碼,你在循環中做什麼。

除此之外,您還只需要其他部分,因爲其他的人永遠不會爲真:

」不能等於「我+ 1」,將永遠不會等於numberofelements,因爲你的循環limitis的(我< numberofelements)

您可以通過訪問所有元素:

for (int i = 0; i < list.Count; i++) // Loop through List with for 
{ 
    // do something with list[i] 
} 
0

我想問題的一部分是,你的第一個if語句永遠不會被使用。 for循環將在我等於numOfElements之前退出(除非您在for循環中修改i)。

所以,你可以這樣做:

if (i == (numOfElements - 1)) { 
    // do something 
    break; 
} 

這將使這樣你就不會得到空指針錯誤。

0

試試這個.....

int numberofelements=20; 

      for (int i = 0; i < numberofelements; i++) 
      { 

       if (i == numberofelements - 1) 
       { 
        Console.WriteLine("last element" + i); 
        break; 
       } 
       else 
       { 

        if (i == i + 1) 
        { 
         Console.WriteLine(i); 

        } 
        else 
        { 
         Console.WriteLine(i); 
        } 
       } 
}