0

こんにちは、この再帰メソッドでは、すべてのアナグラムを見つけて List> に追加しようとしていますが、このコードを実行すると、空のリストがたくさん返されます。

      private List<List<String>> findAnagrams(LetterInventory words,
        ArrayList<String> anagram, int max,
        Map<String, LetterInventory> smallDict, int level, List<List<String>> result) {

    ArrayList<String> solvedWord = new ArrayList<String>();
    LetterInventory shell;
    LetterInventory shell2;
    if (level < max || max == 0) {
        Iterator<String> it = smallDict.keySet().iterator();
        while (it.hasNext()) {
            String k = it.next();
            shell = new LetterInventory(k);
            shell2 = words;
            if (shell2.subtract(shell) != null) {
                anagram.add(k);
                shell2 = words.subtract(shell);
                if (shell2.isEmpty()) {
                    //System.out.println(anagram.toString()); it prints off fine here
                                            result.add(anagram); // but doesnt add here

                }
                else 

                    findAnagrams(shell2, anagram, max, smallDict, level + 1, result);
                anagram.remove(anagram.size()-1);
            }
        }
    }
    return results;
}
4

1 に答える 1

2

ここにあると思います。

else 
    findAnagrams(shell2, anagram, max, smallDict, level + 1, result);
anagram.remove(anagram.size()-1);  // this is outside of the else case

anagram要素を追加するたびに要素を削除します。にあるという意味でしたelseか?

else {
    findAnagrams(shell2, anagram, max, smallDict, level + 1, result);
    anagram.remove(anagram.size()-1);
}
于 2012-11-02T22:58:41.250 に答える