文档说“所有排列发生的可能性大致相等。” 但我不知道这是否包括返回相同订单的(尽管很小)可能性。我有一个方法(见下文),在两次测试运行期间,可能会以原始顺序返回列表。其他因素可能有问题,比如可能选择了字谜,结果是一个词。词典大约是 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 的单词,并返回一个混洗结果的 char 数组。我没有考虑轮询已知长度的单词,而是考虑根据单词长度将词典分成多个集合。