提问人:ShadySpiritomb 提问时间:3/31/2022 更新时间:3/31/2022 访问量:1142
索引超出了数组的范围,没有错误,但代码不会运行 c#
Index was outside the bounds of the array, no errors but code won't run c#
问:
我正在编写代码,将数据从多个文本文件添加到 c#、Windows 窗体的数据网格视图中,当我尝试打开运行此代码的窗体时,它会关闭并给我以下错误消息:System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
它还用黄色突出显示了这一行代码,字符串一词是蓝色的,我不知道这意味着什么。
string fullPupilRecord = pupilDetailsID[l] + "~" + pupilDetailsFirstName[l] + "~" + pupilDetailsSurname[l] + "~" + pupilDetailsClass[l]
+ "~" + pupilDetailsNumber[l] + "~" + skiTime[i] + "~" + quizScore[j] + "~" + quizPercentage[j];
我不知道为什么会这样。所有变量都是使用字符串设置的,除了skiTime,它只是字符串。
using (StreamWriter sw = new StreamWriter("groups.txt", false))
{
for (int i = 0; i < skiTimeID.Count; i++)
{
for (int j = 0; j < quizID.Count; j++)
{
for (int l = 0; l < pupilDetailsID.Count; l++)
{
if (skiTimeID[i] == quizID[j] && quizID[j] == pupilDetailsID[l])
{
string fullPupilRecord = pupilDetailsID[l] + "~" + pupilDetailsFirstName[l] + "~" + pupilDetailsSurname[l] + "~" + pupilDetailsClass[l]
+ "~" + pupilDetailsNumber[l] + "~" + skiTime[i] + "~" + quizScore[j] + "~" + quizPercentage[j];
int quizScoreNumber = Convert.ToInt32(quizScore[j]);
int skiTimeDecimal = Convert.ToInt32 (skiTime[i]);
if (quizScoreNumber >= 3 && skiTimeDecimal <= 40)
{
groupLevel = "Advanced";
}
else if (quizScoreNumber >= 2 && skiTimeDecimal <= 50)
{
groupLevel = "Intermediate";
}
else
{
groupLevel = "Beginner";
}
fullPupilRecord = fullPupilRecord + "~" + groupLevel;
sw.WriteLine(fullPupilRecord);
fullPupilRecord = "";
}
}
}
}
}
这是什么意思,我该如何解决,请帮忙
答:
0赞
Canadian_Pixel
3/31/2022
#1
当您使用循环数组中元素数的 for 循环时,就会出现问题。
由于数组索引从 0 开始,因此循环将尝试在不存在的索引上循环。
例如:你有一个只有一个元素的数组 -计数会说“1” 您的循环将尝试“skiTimeID[0] 和 skiTimeID[1]”
您可以通过两种方式修复它:
for (int i = 0; i < skiTimeID.Count-1; i++)
或 通过使用 for each 循环
评论