【问题标题】:Permutations list repeating itself when returning ArrayList in toString method在 toString 方法中返回 ArrayList 时,排列列表重复自身
【发布时间】:2014-02-14 12:38:05
【问题描述】:

*已解决:没有清除 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 并获得每个列表的一个排列?

【问题讨论】:

  • 您只是将整数添加到perm,并且下次调用nextPermutation() 时永远不会清除它。你想要ArrayList&lt;List&gt; 吗?我明白这个问题,但不是你想用你的代码做什么。你能展示一个驱动perm人口的主要方法吗?
  • 当调试类似这样的事情时,您会看到上一次调用的结果与下一次调用的结果相同,它应该向您发出信号,表明您的数据结构可能不会在两次调用之间被清除.
  • 是的,就是这样,使用 perm.clear() 来帮助解决这个问题。如果其他人有同样的问题,我会将此解决方案添加到 OP 中。谢谢!

标签: java algorithm arraylist


【解决方案1】:

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

如果你继续添加到同一个列表中,它只会越来越多。

【讨论】:

  • 哇!非常感谢,我刚刚检查了如何清除 ArrayList,然后在 nextPermutation() 中的第二个 for 循环之前使用了 perm.clear()。完美运行。再次感谢!
  • 完成!对不起,新用户。 :)
猜你喜欢
  • 2016-06-13
  • 2015-11-01
  • 2014-11-01
  • 2016-10-18
  • 2023-03-22
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多