C#具有指定辅音:元音比例的随机字母生成器

3

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

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

它可以很好地生成随机字母,但问题的说明要求辅音与元音的比例必须为4:1,我不知道如何实现这一部分。

不需要进行任何特殊处理,因为有21个辅音和5个元音,所以比例将是4.2:1。 - Barmar
@SteveWellens你的技术难道没有一个问题吗?就是会有一些辅音被选中的次数比其他的多吗?这个包含40个辅音的袋子里,有19个辅音会出现2次,而另外2个只会出现1次。 - Barmar
@Barmar 字母Y可以代表元音或辅音。因此,如果由于其歧义性而从可能的字母选择中删除它,则比率将为4:1--20个辅音和5个元音。#大功告成! - Adam Porad
@Barmar - 这个包含40个辅音的袋子可能有19个辅音的2个副本和另外2个辅音的1个副本。它也可能有字母k出现4次。这应该是随机的,这意味着可能会出现不均匀分布。 - Steve Wellens
1个回答

6
创建一对静态字符串:
  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) }我理解得对吗? - Chris B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接