作者reccaX (渺小的正义)
看板C_Sharp
标题[问题] 索引超出范围…参数index
时间Wed Nov 4 15:54:17 2015
各位前辈大家好,我是刚学习C#的新手,没有其他程式基础。
所以可能很多基础的东西不是很了解,还请前辈多多指教。
目前写老师交代的作业时遇到一个问题,我想要用windowsform的textbox输入4个数字
然後和随机出来的数字进行猜数字的XAXB比对,但是会跳出:
索引超出范围。必须为非负数且小於集合的大小。 参数名称 index
搜寻网路上这问题好像大部分出现在阵列,可是我依照老师的范例是用list去执行,
同时再产生一个随机4位数字的int list进行比对就不会出现这个问题,
目前推测是Textbox输入的数字有问题,想请问问题可能出在哪里?
以下是CODE:
public List<int> UserAnswer = new List<int>();
int UserAns = 0;
if (textBox1.Text.Length < 4)//判断玩家输入数字数量
{
}
else
{
UserAns = int.Parse(textBox1.Text);
UserAnswer.Add(UserAns);
}
Textbox有用MaxLength限制4,
我的想法是在位数小於4的时候不做任何事情,
不小於4的时候将这输入转换成int整数,并且加入list
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.228.24.34
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1446623661.A.08D.html
1F:→ bantime: 出问题的code应该不在这里 11/04 16:29
2F:→ bantime: 你把其他部分贴上来看看 11/04 16:30
public string GetResult(List<int> userAnswer
{
int aCount = 0;
int bCount = 0;
string result = "";
for (int userAnswerIndex = 0; userAnswerIndex < 4; userAnswerIndex++)
for (int answerIndex = 0; answerIndex < 4; answerIndex++)
{
if (userAnswer[userAnswerIndex] == this.answer[answerIndex])
{
if (userAnswerIndex == answerIndex)//A+1
aCount++;
else
bCount++;//B+1
}
}
}
result += "User Answer:" + this.ConvertNumbersToString(userAnswer) + "\n";
return string.Format("\n{0}A{1}B", aCount, bCount);
}
照同学的建议不进入函式的方法跑是错在这行。
※ 编辑: reccaX (61.228.24.34), 11/04/2015 17:01:26
3F:推 J002: 推测有问题的应该是 UserAns = int.Parse(textBox1.Text); 11/04 17:07
4F:→ J002: 假设输入0123 -> UserAns就会变成123 11/04 17:08
5F:→ J002: 这应该是跟您底下想要执行的code有冲突 11/04 17:08
6F:→ J002: 然後您的UserAnswer就只有123一个元素,Count = 1 11/04 17:09
7F:→ J002: 然後就会跳出索引超出范围的问题@@" 11/04 17:10
8F:→ reccaX: 感谢两位 我大概ㄢ理解了 我试着处理看看 11/04 17:18
9F:推 TameFoxx: 你用subString的方法,分别将四个数字存入 11/04 18:46
10F:推 TameFoxx: 然後可以用contains的方法判断答案中有无正解 11/04 18:49
11F:→ TameFoxx: 若有择判断索引值是否相同,就不必包两回圈了 11/04 18:50
12F:推 TameFoxx: 哦对了,用分割字串可能比substring更方便 11/04 18:52
13F:推 Litfal: 这个题目用字串处理比较轻松,免转数字,Parse或Regex检查 11/05 12:11