【问题标题】:How to solve argument out of range exceptions [duplicate]如何解决参数超出范围异常[重复]
【发布时间】:2019-02-15 22:17:17
【问题描述】:

所以我已经四处寻找了很长一段时间,试图找到解决这个问题的方法。 我一直在尝试制作纸牌游戏,但被困在我创建 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])); 我尝试将其删除,但下一行发生了相同的错误。我不确定自己做错了什么,并试图找到解决方案已经有一段时间了。如果有人有任何提示或答案,那就太好了。 谢谢

【问题讨论】:

  • 您永远不会在playerCards 中添加任何项目,因此没有可以读取的范围内索引。
  • @AlexeiLevenkov,我相信这不是重复的(至少不是那个问题)。在这个问题中,有人尝试设置容量,但对new List&lt;List&lt;int&gt;&gt;(Cards) 的作用存在误解。 tl;博士:这个问题涵盖了其他问题没有的问题。
  • @dyukha 我不认为暗示 OP 无法阅读文档很好。您应该假设他们在询问之前进行了研究(并检查了文档作为其中的一部分)。大概他们已经阅读了new List(capacity) initializes … that is empty,所以他们知道该列表是空的 - 可能他们期望 JavaScript 行为会使您的答案不相关。
  • @AlexeiLevenkov,我个人有时会误解文档,所以我认为说有人误解了文档并不令人反感。无论如何,我的观点是其他人可能会犯同样的错误。他们将搜索 SO 以寻找答案,并且对该问题的答案不提供解释,而对此问题提供解释。不要误会,我是第一个讨厌重复的人,我只是认为这个问题涵盖了一些新事物。
  • @dyukha - 欢迎您提出edit 问题以澄清这不是重复的或提出明确询问的新问题(您显然会自己研究,看看是否有人已经问过列出容量和初始化)。到目前为止,OP 没有问你声称他们问了什么,并且在原始副本中明确回答了“如何解决超出范围异常的参数”(我还添加了一个涵盖容量的内容以防万一)

标签: c#


【解决方案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
}

【讨论】:

  • 您好,当您发布答案时,仅发布代码通常不是一个好主意。你应该解释你的解决方案背后的直觉(或多或少简单的英语)。为什么 OP 提供的代码不起作用以及为什么您的代码起作用。这样,对于 OP 和通过 google-search 找到此问题的每个人来说,解决方案都更加清晰:无需比较两个代码,只需阅读描述并理解解决方案即可。
  • @dyukha 我假设他们知道这个问题已经被回答了很多次并且很可能被删除。所以他们决定在没有关于为什么该代码有用的信息的情况下对 OP 进行攻击......经常这样重复的答案被认为没有用......不确定这是否会在这里发生。
  • @AlexeiLevenkov,好吧,我认为他们只是一个新用户,需要一些指导。另外,请检查我对帖子的评论,为什么我认为它不是重复的(顺便说一句,您是否看到有关它的通知?我首先没有正确包含您的昵称,我不确定它是如何工作的)。
  • 嗨@dyukha,确实我是新来回答这个用户的问题。已经有 10 年没有这样做了,但下次我会听取你的建议,无论如何我认为在这种情况下代码是不言自明的。
【解决方案2】:

除了前面的答案:new List&lt;List&lt;int&gt;&gt;(Cards) 没有做你认为它做的事情。它设置capacity,而不是elementCount(或其他任何名称)。检查边界时,使用elementCount,而不是capacitycapacity 在您清楚知道有多少元素时很有用,可以避免重新分配并且不浪费空间。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多