2014-12-04 46 views
0

我試圖做一個隨機名稱生成,這是我想出了代碼:名發電機不工作

private void GenerateName() 
    { 
     if (GeneratedName == "") 
     { 
      GenerateConsonant(); 
      consonantCurrent = consonant1; 
      GenerateVowel(); 
      vowelCurrent = vowel1; 
      GenerateConsonant(); 
      consonantCurrent = consonant2; 
      GenerateConsonant(); 
      consonantCurrent = consonant3; 
      GenerateVowel(); 
      vowelCurrent = vowel2; 
     } 

     GeneratedName = consonant1 + vowel1 + consonant2 + consonant3 + vowel2; 
    } 

    private void GenerateConsonant() 
    { 
     Random randomNumber = new Random(); 
     GlobalVariables.random = randomNumber.Next(2, 22); 

     if (GlobalVariables.random == 1) 
     { 
      consonantCurrent = "b"; 
     } 
     if (GlobalVariables.random == 2) 
     { 
      consonantCurrent = "c"; 
     } 
     if (GlobalVariables.random == 3) 
     { 
      consonantCurrent = "d"; 
     } 
     if (GlobalVariables.random == 4) 
     { 
      consonantCurrent = "f"; 
     } 
     if (GlobalVariables.random == 5) 
     { 
      consonantCurrent = "g"; 
     } 
     if (GlobalVariables.random == 6) 
     { 
      consonantCurrent = "h"; 
     } 
     if (GlobalVariables.random == 7) 
     { 
      consonantCurrent = "j"; 
     } 
     if (GlobalVariables.random == 8) 
     { 
      consonantCurrent = "k"; 
     } 
     if (GlobalVariables.random == 9) 
     { 
      consonantCurrent = "l"; 
     } 
     if (GlobalVariables.random == 10) 
     { 
      consonantCurrent = "m"; 
     } 
     if (GlobalVariables.random == 11) 
     { 
      consonantCurrent = "n"; 
     } 
     if (GlobalVariables.random == 12) 
     { 
      consonantCurrent = "p"; 
     } 
     if (GlobalVariables.random == 13) 
     { 
      consonantCurrent = "q"; 
     } 
     if (GlobalVariables.random == 14) 
     { 
      consonantCurrent = "r"; 
     } 
     if (GlobalVariables.random == 15) 
     { 
      consonantCurrent = "s"; 
     } 
     if (GlobalVariables.random == 16) 
     { 
      consonantCurrent = "t"; 
     } 
     if (GlobalVariables.random == 17) 
     { 
      consonantCurrent = "v"; 
     } 
     if (GlobalVariables.random == 18) 
     { 
      consonantCurrent = "w"; 
     } 
     if (GlobalVariables.random == 19) 
     { 
      consonantCurrent = "x"; 
     } 
     if (GlobalVariables.random == 20) 
     { 
      consonantCurrent = "y"; 
     } 
     if (GlobalVariables.random == 21) 
     { 
      consonantCurrent = "z"; 
     } 
    } 

    private void GenerateVowel() 
    { 
     Random randomNumber = new Random(); 
     GlobalVariables.random = randomNumber.Next(2, 6); 

     if (GlobalVariables.random == 1) 
     { 
      vowelCurrent = "a"; 
     } 
     if (GlobalVariables.random == 2) 
     { 
      vowelCurrent = "e"; 
     } 
     if (GlobalVariables.random == 3) 
     { 
      vowelCurrent = "i"; 
     } 
     if (GlobalVariables.random == 4) 
     { 
      vowelCurrent = "o"; 
     } 
     if (GlobalVariables.random == 5) 
     { 
      vowelCurrent = "u"; 
     } 
    } 
} 

}

運行它之後,我發現它給了我一個空結果... 如果有明顯的錯誤,請告訴我,因爲我遲鈍:l 或者,如果它永遠不會工作,你可以告訴我一種方法,你會這樣做,然後我會嘗試適應它到我的程序。

順便說一句,我想提出一個大戰略遊戲,可以使用它來生成字符

編輯隨機的名字:我試圖做的是每GenerateConsonant()和GenerateVowel(時間)被稱爲他們會設置 一個隨機字符到當前值。然後在設定每一個之後,它將自己設置爲某個輔音或元音。在此之後,他們會全部放在一起形成一個第一名稱...

+2

對於初學者來說,第一條if語句中的變量賦值是向後的。 – Logarr 2014-12-04 04:27:44

+0

你是什麼意思? – Lamprey 2014-12-04 04:28:18

+0

'consonantCurrent = consonant1;'是向後的。你正在爲consonantCurrent分配輔音1。爲了讓GeneratedName實際上有一個值,您需要反過來。 – Logarr 2014-12-04 04:31:13

回答

2

Logarr意味着,而不是

consonantCurrent = consonant1; 

你應該有

consonant1 = consonantCurrent; 

而且同樣適用於你的其他變量分配。

此外,我建議您在隨機函數中返回一個輔音或元音,而不是將它指定爲consonantCurrentvowelCurrent。它爲您節省了一個變量,並且不那麼令人困惑。

我不確定這些是否是較大類的一部分,但在將值分配給它們之前,請確保您正在初始化您的consonant1等變量。

1

這是一個很大的bug的代碼這麼小的量:

  • Random新實例每個隨機數
  • 不正確的範圍內隨機數生成
  • 反向分配
  • 不使用y作爲元音?

沒關係使用的副作用(類字段),而不是從方法只是返回的值,並利用龐大的一系列if語句(甚至沒有if/else if!)的映射到一個整數字符。

在我看來,這樣的事情會是一個更容易正確地寫,將來就更容易閱讀:

static readonly string[] _vowels = { "a", "e", "i", "o", "u" }; 
    static readonly string[] _consonants = 
     Enumerable.Range((int)'b', (int)'z' - (int)'b' + 1) 
        .Select(c => ((char)c).ToString()) 
        .Except(_vowels) 
        .ToArray(); 

    static readonly Random _random = new Random(); 

    private static string GenerateName() 
    { 
     return GenerateConsonant() 
      + GenerateVowel() 
      + GenerateConsonant() 
      + GenerateConsonant() 
      + GenerateVowel(); 
    } 

    private static string GenerateVowel() 
    { 
     return _vowels[_random.Next(_vowels.Length)]; 
    } 

    private static string GenerateConsonant() 
    { 
     return _consonants[_random.Next(_consonants.Length)]; 
    } 

我會讓你來決定是否要算「Y '作爲元音和輔音,如果是的話如何實現。:)

0

所有的代碼可以放入一個簡單的方法來生成一個隨機命名

在類級別分配Random類

Random rnd = new Random(); 

private string Generate_Name(int length) 
    { 

     string name = ""; 

     string[] letters = new string[21] { "b", "c", "d", 
               "f", "g", "h", "j", 
               "k", "l", "m", "n", 
               "p", "q", "r", "s", "t", 
               "v", "w", "x", "y", "z"}; 

     string[] vowels = new string[5] { "a", "e", "i", "o", "u" }; 

     for (int i = 0; i < length; i++) 
     { 
      if (i == 2 || i == 4) 
      { 
       int index = rnd.Next(0, vowels.Length); 
       name += vowels[index]; 
      } 
      else 
      { 
       int index = rnd.Next(0, letters.Length); 
       name += letters[index]; 
      } 
     } 

     return name; 

    } 

那麼你可以改變周圍的代碼,以適應你需要!