2011-02-10 28 views
7

Ho scritto un programma che può ordinare le parole e determinare qualsiasi anagramma. Voglio generare una serie di stringhe casuali in modo da poter testare il runtime del mio metodo.Generazione di parole casuali in Java?

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

(stub)

Voglio solo parole minuscole di lunghezza 1-10. Ho letto qualcosa su come generare numeri casuali, poi su casting o qualcosa del genere, ma non ho capito completamente. Se qualcuno può mostrarmi come generare parole casuali, allora dovrei essere in grado di usare semplicemente un ciclo for per inserire le parole nell'array. Grazie!

+0

parole a caso in base a quale fonte? (ad esempio numeri casuali + ???? = parole casuali) –

+0

Assegnazione compiti? –

risposta

15

Avete bisogno di parole inglesi effettive o solo stringhe casuali contenenti solo lettere a-z?

Se avete bisogno di parole inglesi effettive, l'unico modo per farlo è usare un dizionario e selezionare le parole da esso a caso.

Se non hai bisogno di parole inglesi, allora qualcosa di simile a questo farà:

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

Grazie! Una cosa che devi fare è lanciare "a" per scrivere o il compilatore si eccita. Grazie a tutti! –

+1

No, non è necessario eseguire il cast di '' a'' su 'char', ma il risultato dell'aggiunta (poiché questo è automaticamente' int'). Quindi dovrebbe essere in effetti 'word [j] = (char) ('a' + random.nextInt (26));' –

+0

Grazie per la correzione, è stato un po 'di tempo da quando ho lavorato con caratteri grezzi in Java. –

1

Perché generare parole casuali? Quando è possibile utilizzare some dictionaries.

+1

Sto cercando di ottenere un runtime medio, quindi le parole generate casualmente dovrebbero darmi la media migliore. Inoltre, questo è per un incarico scolastico, quindi devo conformarmi a ciò che il mio insegnante vuole ... –

+1

dovresti averlo specificato, e taggato come "compiti" –

+0

Oh, scusa non sapevo nemmeno che fosse una categoria ma suppongo che avrebbe perfettamente senso. Lo farò sicuramente la prossima volta. –

8

RandomStringUtils da commons-lang

+2

Il link è morto. – Timo

+0

Nuovo collegamento, non più morto. –

1

Se volete parole a caso senza utilizzare un dizionario ...

  1. Fai un elenco di tutte le lettere che si desidera possibile nelle tue parole
  2. Generare un caso indice per scegliere una lettera dalla lista
  3. Ripetere fino ad ottenere la lunghezza desiderata parola

Ripetere questi passaggi per il numero di parole che si desidera generare.

3

Se si desidera generare parole casuali di una determinata lunghezza, è necessario un algoritmo per determinare se una determinata stringa è una parola (difficile) o l'accesso a un elenco di parole di tutte le parole in una determinata lingua (facile). Se aiuta, here's a list of every word in the Scrabble dictionary.

Dopo aver elencato tutte le parole in una lingua, è possibile caricare tali parole in un ArrayList o altra struttura lineare. È quindi possibile generare un indice casuale in quell'elenco per ottenere la parola casuale.

1

È possibile chiamare questo metodo per ogni parola che si desidera generare. Nota che la probabilità di generare anagrammi dovrebbe essere relativamente bassa.

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 ma suggerirei di usare 'StringBuilder' invece di fare' out + = ...' – casablanca

+0

@casablanca Il compilatore non ottimizzerebbe il suo algoritmo per utilizzare StringBuilder? –

+0

@Kin Sono abbastanza sicuro che non si sarebbe ottimizzato. – whiskeysierra

Problemi correlati