2012-10-23 89 views
3

我需要創建代碼來將50個隨機字母分散到控制檯中(這是一個「蛇」遊戲);那部分,我沒有問題。我用這個代碼生成的字母(以下簡稱「他們四散各地控制檯」我曾經處理部分,我知道如何解決這個問題)C#隨機字母發生器與指定的輔音比例:元音

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

它生成隨機字母就好了,但對於說明問題指定輔音與元音的比例必須是4:1,我不知道如何使這部分發生。

+0

沒有做任何特別的事情,由於有21個輔音和5個元音,這個比例將是4.2:1。 – Barmar

+0

@SteveWellens您的技術難道不會受到某些輔音比其他輔音更多的問題的困擾嗎? 40個輔音包中有19個輔音2個副本,其他2個只有1個。 – Barmar

+0

@Barmar [字母Y](http://en.wikipedia.org/wiki/Y)可以代表一個元音或一個元音輔音。因此,如果由於含糊不清而將其從可能的字母選擇中刪除,則該比例將是4:1 - 20個輔音和5個元音。 #Voila! –

回答

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 
} 

編輯:完整的解決方案。我正在將我的五十個字符寫入數組,然後將它們打印到控制檯。您可以將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()); 
    } 
+0

爲了讓我明白,對於「選擇元音/輔音」,它看起來像這樣: 'if(i%5 == 0) {number = rand.Next(0,20 ); number =(char)('b'+ number) } else { number = rand.Next(0,4); letter =(char)('a'+ number) }' 我理解對嗎? –

+0

@ChrisB - 請參閱上面編輯我的答案。 –