[問題] 索引超出範圍…參數index

看板C_Sharp (C#)作者 (渺小的正義)時間9年前 (2015/11/04 15:54), 9年前編輯推噓5(508)
留言13則, 5人參與, 最新討論串1/1
各位前輩大家好,我是剛學習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://www.ptt.cc/bbs/C_Sharp/M.1446623661.A.08D.html

11/04 16:29, , 1F
出問題的code應該不在這裡
11/04 16:29, 1F

11/04 16:30, , 2F
你把其他部分貼上來看看
11/04 16:30, 2F
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

11/04 17:07, , 3F
推測有問題的應該是 UserAns = int.Parse(textBox1.Text);
11/04 17:07, 3F

11/04 17:08, , 4F
假設輸入0123 -> UserAns就會變成123
11/04 17:08, 4F

11/04 17:08, , 5F
這應該是跟您底下想要執行的code有衝突
11/04 17:08, 5F

11/04 17:09, , 6F
然後您的UserAnswer就只有123一個元素,Count = 1
11/04 17:09, 6F

11/04 17:10, , 7F
然後就會跳出索引超出範圍的問題@@"
11/04 17:10, 7F

11/04 17:18, , 8F
感謝兩位 我大概ㄢ理解了 我試著處理看看
11/04 17:18, 8F

11/04 18:46, , 9F
你用subString的方法,分別將四個數字存入
11/04 18:46, 9F

11/04 18:49, , 10F
然後可以用contains的方法判斷答案中有無正解
11/04 18:49, 10F

11/04 18:50, , 11F
若有擇判斷索引值是否相同,就不必包兩回圈了
11/04 18:50, 11F

11/04 18:52, , 12F
哦對了,用分割字串可能比substring更方便
11/04 18:52, 12F

11/05 12:11, , 13F
這個題目用字串處理比較輕鬆,免轉數字,Parse或Regex檢查
11/05 12:11, 13F
文章代碼(AID): #1MERcj2D (C_Sharp)
文章代碼(AID): #1MERcj2D (C_Sharp)