作者vintagehsieh (KIWI)
看板C_Sharp
標題[問題] 1A2B遊戲的問題
時間Sun Oct 30 23:58:19 2022
大家好,最近在寫一個題目是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://webptt.com/m.aspx?n=bbs/C_Sharp/M.1667145501.A.3B2.html
1F:→ cloki: 你這樣用兩個for loop就只是在找陣列裡面有沒有那個數字 10/31 03:40
2F:→ cloki: 這樣結果肯定都是重覆的吧 10/31 03:40
3F:推 Litfal: 提示1 觀察一下撲克牌,你會每次洗牌時重做一副撲克牌嗎 10/31 06:39
4F:→ marsking: answer.Length != answer.Distinct().Count() 02/02 00:16