2011-02-10 107 views
7

我寫了一個程序,可以排序單詞和確定任何字謎。我想生成一個隨機字符串數組,以便我可以測試我的方法的運行時。在Java中生成隨機單詞?

public static String[] generateRandomWords(int numberOfWords){ 
String[] randomStrings = new String[numberOfWords]; 
Random random = Random(); 
    return null; 
} 

(方法存根)

只想長度1-10的小寫字。我讀了一些關於生成隨機數字的內容,然後將其轉換爲字符或其他內容,但我並沒有完全理解。如果有人能告訴我如何生成隨機單詞,那麼我應該可以輕鬆地使用for循環將單詞插入到數組中。謝謝!

+0

隨機單詞依據是什麼來源? (例如隨機數+ ???? =隨機詞) – 2011-02-10 00:09:42

+0

家庭作業? – 2011-02-10 00:15:27

回答

15

您是否需要實際的英文單詞,或只是包含字母a-z的隨機字符串?

如果您需要真正的英語單詞,唯一的方法就是使用字典,並從中隨機選擇單詞。

如果您不需要英語的話,那麼這樣的事情會做:

public static String[] generateRandomWords(int numberOfWords) 
{ 
    String[] randomStrings = new String[numberOfWords]; 
    Random random = new Random(); 
    for(int i = 0; i < numberOfWords; i++) 
    { 
     char[] word = new char[random.nextInt(8)+3]; // words of length 3 through 10. (1 and 2 letter words are boring.) 
     for(int j = 0; j < word.length; j++) 
     { 
      word[j] = (char)('a' + random.nextInt(26)); 
     } 
     randomStrings[i] = new String(word); 
    } 
    return randomStrings; 
} 
1

爲什麼會產生隨機字?當你可以使用some dictionaries

+1

我想獲得平均運行時間,所以隨機生成的單詞應該給我最好的平均值。此外,這是一個學校作業,所以我必須符合我的老師想要的... – 2011-02-10 00:14:07

+1

你應該指定,並將你的問題標記爲「作業」 – 2011-02-10 00:19:09

+0

哦,對不起,我甚至不知道這是一個類別,但我認爲這會很有意義。下次我肯定會這樣做。 – 2011-02-10 06:46:27

1

如果你不想使用字典隨機的話...

  1. 讓所有你想要的可能,你的話的字母列表
  2. 生成隨機指數從列表中
  3. 重複,直到你有你想要的字長
挑選出一個信

對要生成的單詞數重複這些步驟。

3

如果您想生成給定長度的隨機單詞,您需要一個算法來確定給定的字符串是單詞(硬)還是訪問給定語言中所有單詞的單詞列表(簡單)。如果有幫助,here's a list of every word in the Scrabble dictionary

一旦你有一種語言的所有單詞列表,你可以加載這些單詞到ArrayList或其他線性結構。然後,您可以在該列表中生成一個隨機索引來獲取隨機詞。

1

您可以爲要生成的每個單詞調用此方法。請注意,生成字形的概率應該相對較低。

String generateRandomWord(int wordLength) { 
    Random r = new Random(); // Intialize a Random Number Generator with SysTime as the seed 
    StringBuilder sb = new StringBuilder(wordLength); 
    for(int i = 0; i < wordLength; i++) { // For each letter in the word 
     char tmp = 'a' + r.nextInt('z' - 'a'); // Generate a letter between a and z 
     sb.append(tmp); // Add it to the String 
    } 
    return sb.toString(); 
}