docs说:“所有排列发生的可能性都差不多。”但是我不知道这是否包括返回相同顺序的可能性(但是很小)。我有一种方法(请参阅下文),其中在两次测试运行期间,列表可能会按原始顺序返回。.其他因素可能有误,例如可能选择了七字谜并且结果是一个单词。词典约为30万个单词,因此我将方法更改为更合适的测试,以防止出现这种情况。
方法:
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数组。我没有考虑轮询一个已知长度的单词,而是考虑根据单词的长度将词典分成多个集合。
最佳答案
是的,可能保留了原始顺序,但是,正如您所说,较长的列表不太可能保留。尝试仅包含两个元素的列表,以查看是否发生这种情况。