[問題] 1A2B遊戲的問題

看板C_Sharp作者 (KIWI)時間1年前 (2022/10/30 23:58), 編輯推噓1(103)
留言4則, 3人參與, 2年前最新討論串1/2 (看更多)
大家好,最近在寫一個題目是1A2B。 其中有個部分是檢查隨機生成的四位數字是否有重複, 例如0123就可以,但1123就不行(因為1重複了), 但是不太知道怎麼寫, 能執行的時候還是會跑出有重複的數字。 我的步驟如下: 1. 製造一個長度為四的陣列(answer) 2. 然後隨機種子選取四個數字,透過for迴圈放到答案中 3. 跳到檢查的方法中,檢查直到通過,再返回答案存到答案中 我的程式碼如下: public class GuessNumber { public int[] answer; public void newGame() { int[] answer = new int[4]; var random = new Random(Guid.NewGuid().GetHashCode()); for (int i = 0; i < answer.Length; i++) { answer[i] = random.Next(0, 10); } this.answer = RandomCheck(answer); } public int[] RandomCheck(int[] answer) { bool repetition = true; //是否有重複 for (int i = 0; i < answer.Length; i++) { do { repetition = false; for (int k = 0; k < i; k++) { if (answer[i] != answer[k]) continue; else { newGame(); } } repetition == true; } while (repetition == true); return answer; } 如果排版錯誤讓大家不好看的話再跟大家道歉, 我再看看怎麼樣可以排的比較好看。 我覺得我在randomcheck的方法中好像出了什麼錯, 因為如果沒有do-while的話,還是會產生有重複四位數字, 一方面我想知道我這邊出錯在哪裡, 二方面我也會嘗試不同寫法, 都很歡迎大家給我意見!非常感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.252.13.37 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1667145501.A.3B2.html

10/31 03:40, 1年前 , 1F
你這樣用兩個for loop就只是在找陣列裡面有沒有那個數字
10/31 03:40, 1F

10/31 03:40, 1年前 , 2F
這樣結果肯定都是重覆的吧
10/31 03:40, 2F

10/31 06:39, 1年前 , 3F
提示1 觀察一下撲克牌,你會每次洗牌時重做一副撲克牌嗎
10/31 06:39, 3F

02/02 00:16, 2年前 , 4F
answer.Length != answer.Distinct().Count()
02/02 00:16, 4F
文章代碼(AID): #1ZNfyTEo (C_Sharp)
文章代碼(AID): #1ZNfyTEo (C_Sharp)