如何解决参数超出范围的异常

时间:2019-02-15 22:17:18

标签: c#

因此,我已经寻找了很长时间,试图找到解决方案。 我一直在尝试制作纸牌游戏,并被困在一个创建cad及其属性的区域。我决定以数组的形式进行制作。代码如下:

(不确定最初发生的事情)

string[] dogs = System.IO.File.ReadAllLines(@"C:\Users\corin\Documents\C# coding\dogs.txt");

int individual = totalCards / 2;

Random r = new Random();
int Cards = totalCards / 2;

List<List<int>> playerCards = new List<List<int>>(Cards);

for (int x = 0; x < (Cards-2); x++)
{
    playerCards[0].Add(Int32.Parse(dogs[x]));//Cards
    playerCards[1].Add(r.Next(1, 6));//Drool
    playerCards[2].Add(r.Next(1, 101));//Exercise
    playerCards[3].Add(r.Next(1, 11));//Intelligence
    playerCards[4].Add(r.Next(1, 11));//Friendliness
}

在运行代码之前没有引发任何错误,但是当我尝试运行该代码时,该行发生了参数超出范围异常:playerCards [0] .Add(Int32.Parse(dogs [x])); 我尝试将其删除,下一行发生了相同的错误。我不确定自己做错了什么,并尝试寻找解决方案已有一段时间。如果有人有任何提示或答案,那就太好了。 谢谢

2 个答案:

答案 0 :(得分:1)

尝试:

string[] dogs = System.IO.File.ReadAllLines(@"C:\Users\corin\Documents\C# coding\dogs.txt");

int individual = totalCards / 2;

Random r = new Random();
int Cards = totalCards / 2;

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

//the missing piece
for (int i = 0; i < (Cards ); i++)
{
     playerCards.add(new List<int>()); 
}


for (int x = 0; x < (Cards-2); x++)
{
    playerCards[0].Add(Int32.Parse(dogs[x]));//Cards
    playerCards[1].Add(r.Next(1, 6));//Drool
    playerCards[2].Add(r.Next(1, 101));//Exercise
    playerCards[3].Add(r.Next(1, 11));//Intelligence
    playerCards[4].Add(r.Next(1, 11));//Friendliness
}

答案 1 :(得分:0)

除了先前的答案:new List<List<int>>(Cards)并没有您认为的那样。它设置capacity,而不是elementCount(或任何它称为的)。选中边界后,将使用elementCount,而不使用capacitycapacity在您有一个好主意时非常有用,可以避免重新分配并且不浪费空间。

是的,在按索引访问之前,应手动将元素添加到列表中。