*已解决:未清除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并为每个列表获得一个排列?
答案 0 :(得分:1)
您需要在每次打印后以及下次调用nextPermutation()
之前清除烫发,或者让nextPermutation()
创建并返回一个打印然后丢弃的列表。
如果你继续添加到同一个列表中,它就会增长并增长。