2011-02-10 4 views
7

Я написал программу, которая может сортировать слова и определять любые анаграммы. Я хочу создать массив случайных строк, чтобы я мог проверить время выполнения моего метода.Создание случайных слов в Java?

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

(метод заглушкой)

Я просто хочу строчных слова длиной 1-10. Я читал кое-что о генерации случайных чисел, затем бросал на чар или что-то еще, но я не совсем понял. Если кто-то может показать мне, как генерировать случайные слова, тогда мне легко будет просто использовать цикл for для вставки слов в массив. Благодаря!

+0

случайных слов на основе какого источника? (например, случайные числа + ???? = случайные слова) –

+0

Домашнее задание? –

ответ

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; 
} 
+0

Спасибо! Одна вещь, в которой вы нуждаетесь, - это бросить «a» на char, иначе компилятор вас устраивает. Всем спасибо! –

+1

Нет, вам не нужно указывать '' a'' на 'char', но результат добавления (так как это автоматически' int'). Так что это должно быть на самом деле 'word [j] = (char) ('a' + random.nextInt (26));' –

+0

Спасибо за исправление, прошло некоторое время с тех пор, как я работал с сырыми символами на Java. –

1

Зачем генерировать случайные слова? Когда вы можете использовать some dictionaries.

+1

Я пытаюсь получить среднее время выполнения, поэтому случайные сгенерированные слова должны дать мне лучшее среднее значение. Кроме того, это для школьного задания, поэтому я должен соответствовать тому, что хочет мой учитель ... –

+1

Вы должны были указать это и пометили свой вопрос как «домашнее задание» –

+0

О, извините, я даже не знал, что это была категория , но я полагаю, что это будет иметь смысл. Я обязательно сделаю это в следующий раз. –

8

RandomStringUtils из достоянию-Ланг

+2

Ссылка мертва. – Timo

+0

Новое соединение, больше не мертвое. –

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(); 
} 
+1

+1 но я бы предложил использовать 'StringBuilder' вместо того, чтобы делать' out + = ...' – casablanca

+0

@casablanca Разве компилятор не оптимизирует свой алгоритм для использования StringBuilder? –

+0

@Kin Я уверен, что он не будет оптимизирован. – whiskeysierra

Смежные вопросы