我想用一个单词的每一个字母并随机化它但它在C#中不起作用

时间:2014-10-22 22:15:11

标签: c# random char

是的我已经搜索了很多解决方案,是的我是初学者,这是我第一次通过这个网站提问。我经常问我的老师,但我有一个假期,我正在空闲时间学习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;。

2 个答案:

答案 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());