3

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

4

1 回答 1

11

是的,原始订单可能会被保留,但正如您所说,这对于较长的列表不太可能。尝试一个只有两个元素的列表,看看会发生什么。

于 2012-09-05T01:41:43.793 回答