[英]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.