C# 我想使用一个单词的每个字母并将其随机化,但它不';我不能在C工作#
是的,我已经搜索了很多解决方案,是的,我是一个初学者,这是我第一次通过这个网站提问。我通常会问我的老师,但我有一个假期,我把空闲时间花在学习C#上 我有一个我自己编的任务,这个任务是一个游戏,你必须把一个单词放到控制台应用程序中,控制台必须将单词的每一个字母随机排列,以便其他玩家猜测单词是什么 示例:单词是“programming”,之后控制台会混淆单词的字母,因此可能是“ginamrmgorp”,玩家必须猜测单词是什么C# 我想使用一个单词的每个字母并将其随机化,但它不';我不能在C工作#,c#,random,char,C#,Random,Char,是的,我已经搜索了很多解决方案,是的,我是一个初学者,这是我第一次通过这个网站提问。我通常会问我的老师,但我有一个假期,我把空闲时间花在学习C#上 我有一个我自己编的任务,这个任务是一个游戏,你必须把一个单词放到控制台应用程序中,控制台必须将单词的每一个字母随机排列,以便其他玩家猜测单词是什么 示例:单词是“programming”,之后控制台会混淆单词的字母,因此可能是“ginamrmgorp”,玩家必须猜测单词是什么 string woord = Console.ReadLi
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();
string woord=Console.ReadLine();
随机=新随机();
char[]woorden=woord.ToCharArray();
for(int i=0;i
问题是,控制台没有使用单词的每个字母,但控制台使用了单词的一些字母(不是全部),并将其放入单词的长度中,因此它不是“ginamrmgorp”,而是“gimmmoopra”。
随机。下一步
不一定每次都返回不同的数字。你很可能多次得到相同的数字
您要做的是将字母洗牌,这可以通过按随机数排序来完成:
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);
}
Random。Next
不一定每次都返回不同的数字。你很可能多次得到相同的数字
您要做的是将字母洗牌,这可以通过按随机数排序来完成:
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);
}
基本上你想洗牌的字符数组。您可以使用Fisher-Yates shuffle算法轻松做到这一点,如中所实现的。以下是阵列的修改版本:
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;
}
}
基本上你想洗牌的字符数组。您可以使用Fisher-Yates shuffle算法轻松做到这一点,如中所实现的。以下是阵列的修改版本:
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;
}
}
您需要在每次迭代时从
数组中删除所选字母。要做到这一点,最好使用列表
而不是数组。您需要在每次迭代时从数组
中删除所选字母。为此,使用列表可能比使用数组更好