C# 为什么争论超出了范围?
我的代码如下:C# 为什么争论超出了范围?,c#,list,C#,List,我的代码如下: for(int i=1; i < 21; i++) { list.Add(random.Next(100)); } for(int i=1; i < 21; i++) { Console.Write(list[i] + ", "); } for(int i=1;i
for(int i=1; i < 21; i++)
{
list.Add(random.Next(100));
}
for(int i=1; i < 21; i++)
{
Console.Write(list[i] + ", ");
}
for(int i=1;i<21;i++)
{
list.Add(random.Next(100));
}
对于(int i=1;i<21;i++)
{
Console.Write(列表[i]+“,”);
}
但是,我得到了一个参数超出范围的异常I
如果我将I
的第二个循环值更改为0和20
,它会正常工作,这是怎么回事?因为您的循环是错误的
第一个循环向列表中添加20个元素,从索引0开始,到索引19结束。从i=1
开始到21
结束这一事实与此无关,因为您不是按索引设置的,而是附加到列表的末尾
第二个循环尝试读取索引1到20。20不存在,所以你得到一个例外
“正确”的版本是
for( int i = 0; i < 20; ++i )
{
Console.Write(list[i] + ", ");
}
您的第一个循环表明您缺乏理解。如果要向列表中添加20个元素,请按如下方式构造列表:
for( int i = 0; i < 20; ++ )
{
// add to list
}
for(int i=0;i<20;++)
{
//添加到列表中
}
当然你也可以写
for( int i = 121; i < 141; ++ )
{
// add to list
}
for(int i=121;i<141;++)
{
//添加到列表中
}
但这只是令人困惑;) 在创建列表时,需要添加20项
但是,列表是0索引的
当你说list[1]
时,你实际上得到了列表中的第二个元素。所以list[20]
实际上是元素21,它不存在。因为即使第一个循环使用1-21,列表或数组仍然以0开头,索引为0第一个循环插入20个元素,索引为0到19。在第二个循环中,您尝试使用从1到20的索引值访问它们。在第二个for循环中,我从1开始,它是数组中的第二个元素。将(int i=0;i<20;i++)的值更改为
将从数组中的第一个元素开始。因为索引是以零为基础的。在第一个循环中,您只需将元素添加到列表的最后一个位置(不需要索引),但在第二个循环中,您通过索引访问元素,索引应该是0-19;因此,您的循环应该是:
for(int i=1; i < 21; i++)
{
Console.Write(list[i-1] + ", ");
}
for(int i=1;i<21;i++)
{
控制台。写入(列表[i-1]+“,”);
}
如果您想从1开始循环。前7个答案都是正确的。列表是基于0的,这导致了您的问题(列表[20]不存在)。如果可以,您应该考虑使用循环而不是直接对列表进行索引。我建议只使用0索引访问,而不是这样做,即使它是有效的。@ Servy,我完全同意您的意见。我只是在演示如果OP坚持在1开始他的循环,为了让它工作,需要做些什么。在循环中使用list.Count作为上限将使它变得更好。如果第一个循环索引假设成立,这将是一个很好的答案correct@Jake:是的,我正在快速打字,试图在。。。修正了。十亿个答案都解释了你做错了什么。不过,您可能值得花时间搜索“为什么数组0被索引”以查看解释其背后原因的大量信息。
for( int i = 121; i < 141; ++ )
{
// add to list
}
for(int i=1; i < 21; i++)
{
Console.Write(list[i-1] + ", ");
}