C# 我想使用一个单词的每个字母并将其随机化,但它不';我不能在C工作#

C# 我想使用一个单词的每个字母并将其随机化,但它不';我不能在C工作#,c#,random,char,C#,Random,Char,是的,我已经搜索了很多解决方案,是的,我是一个初学者,这是我第一次通过这个网站提问。我通常会问我的老师,但我有一个假期,我把空闲时间花在学习C#上 我有一个我自己编的任务,这个任务是一个游戏,你必须把一个单词放到控制台应用程序中,控制台必须将单词的每一个字母随机排列,以便其他玩家猜测单词是什么 示例:单词是“programming”,之后控制台会混淆单词的字母,因此可能是“ginamrmgorp”,玩家必须猜测单词是什么 string woord = Console.ReadLi

是的,我已经搜索了很多解决方案,是的,我是一个初学者,这是我第一次通过这个网站提问。我通常会问我的老师,但我有一个假期,我把空闲时间花在学习C#上

我有一个我自己编的任务,这个任务是一个游戏,你必须把一个单词放到控制台应用程序中,控制台必须将单词的每一个字母随机排列,以便其他玩家猜测单词是什么

示例:单词是“programming”,之后控制台会混淆单词的字母,因此可能是“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();
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;  
    }  
}

您需要在每次迭代时从
数组中删除所选字母。要做到这一点,最好使用
列表
而不是数组。您需要在每次迭代时从
数组
中删除所选字母。为此,使用
列表可能比使用数组更好