2011-02-10 116 views
7

Escribí un programa que puede ordenar palabras y determinar cualquier anagrama. Quiero generar una matriz de cadenas aleatorias para poder probar el tiempo de ejecución de mi método.Generando palabras aleatorias en Java?

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

(Stub)

sólo quiero decir minúsculas de longitud 1-10. Leí algo acerca de generar números aleatorios, luego lanzar a char o algo así, pero no entendí del todo. Si alguien puede mostrarme cómo generar palabras aleatorias, entonces podría fácilmente usar un ciclo for para insertar las palabras en la matriz. ¡Gracias!

+0

palabras al azar sobre la base de qué fuente? (por ejemplo, números aleatorios + ???? = palabras aleatorias) –

+0

¿Tarea asignada? –

Respuesta

15

¿Necesita palabras en inglés reales, o solo cadenas aleatorias que solo contengan letras a-z?

Si necesita palabras reales inglés, la única manera de hacerlo es utilizar un diccionario, y seleccionar las palabras de ella al azar.

Si usted no necesita palabras en inglés, entonces algo como esto hará:

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

Gracias! Una cosa que debes hacer es lanzar 'a' a char o el compilador se asusta. ¡Gracias a todos! –

+1

No, no necesita convertir ''a'' en' char', sino el resultado de la adición (ya que esto es 'int' automáticamente). Así que debería ser de hecho 'word [j] = (char) ('a' + random.nextInt (26));' –

+0

Gracias por la corrección, ha pasado un tiempo desde que trabajé con caracteres sin formato en Java. –

1

¿Por qué generar palabras al azar? Cuando puede usar some dictionaries.

+1

Estoy tratando de obtener un tiempo de ejecución promedio, por lo que las palabras generadas al azar deberían darme el mejor promedio. Además, esto es para una tarea escolar, así que debo conformarme con lo que mi maestro quiere ... –

+1

debes haber especificado eso, y etiquetar tu pregunta como "tarea" –

+0

Oh, lo siento, ni siquiera sabía que era una categoría , pero supongo que tendría mucho sentido. Me aseguraré de hacer eso la próxima vez. –

8

RandomStringUtils de commons-lang

+2

El enlace está muerto. – Timo

+0

Nuevo enlace, ya no está muerto. –

1

Si desea palabras al azar sin necesidad de utilizar un diccionario ...

  1. Haga una lista de todas las letras que desea sea posible en sus palabras
  2. Generar un azar índice de seleccionar una letra de la lista
  3. Repita hasta que tenga su longitud de palabra deseada

Repita estos pasos para la cantidad de palabras que desea generar.

3

Si desea generar palabras aleatorias de una longitud determinada, necesitará un algoritmo para determinar si una cadena dada es una palabra (difícil) o acceder a una lista de palabras de todas las palabras en un idioma determinado (fácil). Si ayuda, here's a list of every word in the Scrabble dictionary.

Una vez que tenga una lista de todas las palabras en un idioma, puede cargar esas palabras en un ArrayList u otra estructura lineal. Luego puede generar un índice aleatorio en esa lista para obtener la palabra aleatoria.

1

Puede llamar a este método para cada palabra que desee generar. Tenga en cuenta que la probabilidad de generar anagramas debería ser relativamente baja.

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, pero sugeriría usar 'StringBuilder' en lugar de hacer' out + = ...' – casablanca

+0

@casablanca ¿El compilador no optimizaría su algoritmo para usar StringBuilder? –

+0

@Kin Estoy bastante seguro de que no se optimizará. – whiskeysierra