2011-02-10 69 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(); 
}