是的我已经搜索了很多解决方案,是的我是初学者,这是我第一次通过这个网站提问。我经常问我的老师,但我有一个假期,我正在空闲时间学习C#。
我有一个由我自己编写的任务,任务是一个游戏,你必须在控制台应用程序中输入一个单词,控制台必须随机化单词的每一个字母,以便其他玩家必须猜测这个词是什么。
例子:这个词是"编程"之后,控制台会混淆单词的字母,所以它可能是" ginamrmgorp"并且玩家必须猜出这个词是什么。
string woord = Console.ReadLine();
Random random = new Random();
char[] woorden = woord.ToCharArray();
for (int i = 0; i < woorden.Length; i++)
{
kiesgetal = random.Next(0, woorden.Length);
char letter = woorden[kiesgetal];
Console.Write("letter: ");
Console.WriteLine(letter);
}
Console.ReadKey();
问题是控制台没有使用单词的每个字母,但是控制台正在使用单词的一些字母(而不是全部),并且它将它放在单词的长度中,因此它不是。 t&#34; ginamrmgorp&#34;但是&#34; gimmmmoopra&#34;。
答案 0 :(得分:4)
基本上你想 shuffle 字符数组。您可以使用 Fisher-Yates shuffle算法轻松完成此操作,如this answer中所实现。以下是数组的修改版本:
public static void Shuffle<T>(this T[] list)
{
Random rng = new Random();
int n = list.Length;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
然后就这样使用它:
char[] woorden = woord.ToCharArray();
woorden.Shuffle();
string shuffledWord = new string(woorden);
答案 1 :(得分:1)
Random.Next
每次都不一定会返回不同的数字。你很可能会得到相同数量的多次。
你要做的是 shuffle 这些字母,可以通过随机编号来完成:
char[] woorden = woord.ToCharArray();
var woordenShuffled = woorden.OrderBy(c => random.Next()).ToArray();
for (int i = 0; i < woordenShuffled.Length; i++)
{
char letter = woordenShuffled[i];
Console.Write("letter: ");
Console.WriteLine(letter);
}
或者如果您只想创建整个字符串:
string woordShuffled = new string(woord.OrderBy(c => random.Next()).ToArray());