作者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/m.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