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