[问题] 1A2B游戏的问题

楼主: vintagehsieh (KIWI)   2022-10-30 23:58:19
大家好,最近在写一个题目是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的话,还是会产生有重复四位数字,
一方面我想知道我这边出错在哪里,
二方面我也会尝试不同写法,
都很欢迎大家给我意见!非常感谢
作者: cloki (夜云天)   2022-10-31 03:40:00
你这样用两个for loop就只是在找阵列里面有没有那个数字这样结果肯定都是重复的吧
作者: Litfal (Litfal)   2022-10-31 06:39:00
提示1 观察一下扑克牌,你会每次洗牌时重做一副扑克牌吗
作者: marsking (廉价打字员)   2021-02-02 00:16:00
answer.Length != answer.Distinct().Count()

Links booklink

Contact Us: admin [ a t ] ucptt.com