単語を並べ替えてアナグラムを判別できるプログラムを作成しました。メソッドのランタイムをテストできるように、ランダムな文字列の配列を生成したいと思います。
public static String[] generateRandomWords(int numberOfWords){
String[] randomStrings = new String[numberOfWords];
Random random = Random();
return null;
}
(メソッドスタブ)
長さ1〜10の小文字が必要です。乱数を生成してからcharなどにキャストすることについて何か読んだのですが、完全には理解できませんでした。誰かがランダムな単語を生成する方法を教えてくれれば、forループを使用して単語を配列に挿入するだけで簡単にできるはずです。ありがとう!
実際の英語の単語が必要ですか、それとも文字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;
}
RandomStringUtils fromcommons-lang
特定の長さのランダムな単語を生成する場合は、特定の文字列が単語であるかどうかを判断するアルゴリズム(ハード)、または特定の言語のすべての単語の単語リストへのアクセス(簡単)が必要です。それが役に立ったら、 これがスクラブル辞書のすべての単語のリストです 。
言語内のすべての単語のリストを取得したら、それらの単語をArrayList
またはその他の線形構造にロードできます。次に、そのリストにランダムなインデックスを生成して、ランダムなWordを取得できます。
生成する単語ごとにこのメソッドを呼び出すことができます。ただし、アナグラムを生成する確率は比較的低いはずであることに注意してください。
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();
}
なぜランダムな単語を生成するのですか? 一部の辞書 を使用できる場合。
辞書を使わずにランダムな単語が必要な場合...
生成する単語の数について、これらの手順を繰り返します。