2011-12-15 87 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); 
        } 
       } 
}