在C#中生成随机大写字母,同时检查每个都只生成一对

问题描述 投票:2回答:2

嗨,我正在尝试用C#编写基本的控制台Pexeso游戏。我想知道如何生成一对且只有一对大写字母。

到目前为止,我的代码可以生成随机大写字母的字符串,但我不知道如何控制它只生成两个,每个只生成两个。

        string chars = "AABBCCDDEEFFGGHHIIJJKKLL";
        var stringChars = new char[24];
        Random random = new Random();

        for (int i = 0; i < stringChars.Length; i++)
        {
            stringChars[i] = chars[random.Next(chars.Length)];
        }

        string finalString = new String(stringChars);

        Console.WriteLine(finalString);

非常感谢您的帮助。

c# random generator
2个回答
1
投票

您可以通过在最终序列中定义所需的所有项目来开始。

接下来你要做的就是不要像你现在那样从该列表中获取项目(以一种你可以多次使用它们的方式),而不是实际上想要洗牌。

想象一下,你的信件是打牌,你需要两套。你洗牌,你有一系列扑克牌,每张牌都出现两次。

要改组你的字母或任何给定的序列,你可以使用Fisher-Yates shuffle

像这样的东西应该做的伎俩:

for (int i = chars.Length - 1; i > 0; i--)
{
    char j = random.Next(i + 1);
    int temp = chars[i];
    chars[i] = chars[j];
    chars[j] = temp;
}

现在你不再需要你的finalString:你想要的结果是你的chars阵列。


0
投票

对你的问题一个简单的解决方案是使用LINQ的方法OrderBy随机数:

string chars = "AABBCCDDEEFFGGHHIIJJKKLL";

Random random = new Random();
var shuffled = chars.OrderBy(c => random.Next(chars.Length));

string finalString = new string(shuffled.ToArray());

Console.WriteLine(finalString);

有时您可能会看到人们使用Guid而不是随机数:

string chars = "AABBCCDDEEFFGGHHIIJJKKLL";

var shuffled = chars.OrderBy(c => Guid.NewGuid());

string finalString = new string(shuffled.ToArray());

Console.WriteLine(finalString);
© www.soinside.com 2019 - 2024. All rights reserved.