簡體   English   中英

在 C# 中生成隨機大寫字母,同時檢查每個字母只生成一對

[英]Generation of random capital letters in C# while checking to generate only one pair from each

嗨,我正在嘗試用 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);

非常感謝您的幫助。

您可以通過在最終序列中定義您想要的所有項目來開始。

您接下來要做的不是像現在一樣從該列表中獲取項目(以一種您可以多次獲取它們的方式),而是您實際上想要洗牌您的列表。

想象一下你的字母是紙牌,你拿了兩套完整的紙牌。 您將它們洗牌,然后您就有了一系列撲克牌,其中每張牌都恰好出現兩次。

要打亂您的一組字母或任何給定的序列,您可以使用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數組中。

您的問題的一種簡單解決方案是使用帶有隨機數的 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM