在toString方法中返回ArrayList时,排列列表重复自身

时间:2014-01-23 19:00:00

标签: java algorithm arraylist

*已解决:未清除ArrayList ebwteen调用,因此列表保持递增。我在nextPermutation()的第二个for循环之前添加了perm.clear(),问题解决了!感谢所有帮助过的人。

我在toString方法中返回ArrayList时遇到了麻烦。我的任务是从数字1-10生成10个排列列表。方法nextPermutation在驱动程序中调用10次。

我希望我的输出看起来像这样:

List 1: [4 6 8 1 9 7 10 5 3 2]
List 2: [6 8 1 7 3 4 9 10 5 2]

等。

相反,每个新列表都会保留最后一个列表中的排列,同时添加新的排列,所以我得到了这个:

List 1:  [6, 2, 3, 9, 4, 5, 10, 8, 7, 1]
List 2:  [6, 2, 3, 9, 4, 5, 10, 8, 7, 1, 3, 7, 2, 9, 1, 10, 6, 4, 8, 5]

这是我的代码:

import java.util.*;

public class PermutationGenerator {
    Random rand;
    ArrayList<Integer> perm = new ArrayList<Integer>();

    public PermutationGenerator(int s) {
        rand = new Random(s);
    }

    public void nextPermutation() {
        ArrayList<Integer> myArrayList = new ArrayList<Integer>();
        for (int i = 1; i <= 10; i++) {
            myArrayList.add(i);
        }

        for (int i = 1; i <= 10; i++) {
            int a = rand.nextInt(myArrayList.size());
            perm.add(myArrayList.get(a));
            myArrayList.remove(a);
        }
    }

    public final String toString() {
        return perm.toString();
    }
}

通过将void nextPermutation()方法更改为ArrayList,在方法内返回perm,并从字段中取出ArrayList并将其放入nextPermutation方法,我能够获得正确的输出。但是,对于赋值,我需要nextPermutation为void,我还需要一个toString方法。

所以,我的问题是,如何在toString中返回perm并为每个列表获得一个排列?

1 个答案:

答案 0 :(得分:1)

您需要在每次打印后以及下次调用nextPermutation()之前清除烫发,或者让nextPermutation()创建并返回一个打印然后丢弃的列表。

如果你继续添加到同一个列表中,它就会增长并增长。