这个文档说“所有排列出现的可能性大致相等”,但我不知道是否包括返回相同的顺序(尽管可能性很小)。我有一种方法(见下文),在两次测试运行中,列表以原始顺序返回,也许...其他因素可能有问题,例如可能选择了一个变位词,结果是一个单词。词典约为300,000个单词,因此我已将该方法更改为更合适的测试,以防止这种情况发生。
private static char[] nextScrambledWord(int wordLength) {
String word;
do {
word = "ABCDEF"; //TODO Get a word from lexicon
} while(word.length() != wordLength);
ArrayList<Character> temp = new ArrayList<Character>(wordLength);
for(int i = 0; i < wordLength; i++) {
temp.add(word.charAt(i));
}
Collections.shuffle(temp);
char[] result = new char[wordLength];
for(int i = 0; i < wordLength; i++) {
result[i] = temp.get(i);
}
return result;
}
我也对这种方法很好奇。如果有人有建议可以改进它,欢迎分享。基本上,该方法将从一个集合中提取一个长度为wordLength的单词,并返回打乱顺序的字符数组。与其获取已知长度的单词,我考虑根据单词长度将词汇表分成多个集合。