【问题标题】:C# random letter generator with specified ratio of consonants:vowels具有指定辅音:元音比例的 C# 随机字母生成器
【发布时间】:2012-10-12 23:30:05
【问题描述】:

我需要创建代码以将 50 个随机字母分散到控制台中(这是一个“蛇”游戏);那部分,我没有问题。我使用此代码生成字母(一旦我知道如何解决问题,我正在处理的“将它们分散在控制台周围”部分)

        Random rand = new Random();
        int number = rand.Next(0, 26);
        char letter = (char)('a' + number);

它生成随机字母就好了,但是问题的说明指定辅音与元音的比例必须是 4:1,我不知道如何让这部分发生。

【问题讨论】:

  • 不做任何特别的事情,因为有 21 个辅音和 5 个元音,所以比例将是 4.2:1。
  • @SteveWellens 您的技术不会遇到一些辅音比其他辅音选择更多的问题吗?一袋 40 个辅音将有 19 个辅音的 2 个副本,其他 2 个只有 1 个。
  • @Barmar letter Y 可以表示元音或辅音。因此,如果由于歧义而将其从可能的字母选择中删除,则比例将为 4:1——20 个辅音和 5 个元音。 #瞧!
  • @Barmar - 40 个辅音的袋子可能有 19 个辅音的 2 个副本,而其他 2 个中只有 1 个。它也可能有 4 个字母 k。它应该是随机的,这意味着可能分布不均匀。

标签: c# string random console


【解决方案1】:

创建一对静态字符串:

  String consonants = "BCDFGHJKLMNPQRSTVWXYZ";

  String vowels = "AEIOU";

生成一个介于 1..5(或 0..4)之间的随机数。如果数字是 1 (0),则从元音列表中选择一个随机字符。否则从辅音列表中选择一个随机字符。

或者,如果您需要恰好 4:1 的比例,请使用 for 循环代替第一个随机数生成器,即:

for ( i = 0; i < 50; i++ )
{
    if ( i % 5 == 0 )
    // select a vowel at random
    else
    // select a consonant at random
}

编辑:完整的解决方案。我正在将我的 50 个字符写入一个数组,然后将它们打印到控制台。您可以将theChar 传递给您的输出方法。

    public void RandomChars()
    {
        Random random = new Random();
        String consonants = "BCDFGHJKLMNPQRSTVWXYZ";
        String vowels = "AEIOU";
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < 50; i++)
        {
            char theChar;

            if (i % 5 == 0)
            {
                theChar = vowels[random.Next(vowels.Length)];
            }
            else
            {
                theChar = consonants[random.Next(consonants.Length)];
            }

            result.Append(theChar);
        }

        Console.WriteLine(result.ToString());
    }

【讨论】:

  • 为了确保我理解,对于“选择元音/辅音”,它看起来像:if (i % 5 == 0) { number = rand.Next(0,20); letter = (char)('b' + number) } else { number = rand.Next(0,4); letter = (char)('a' + number) }我理解对了吗?
猜你喜欢
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2018-11-16
相关资源
最近更新 更多