【问题标题】:ArrayList of Arrays gets overwritten everytimeArrayList of Arrays 每次都会被覆盖
【发布时间】:2015-07-13 17:54:44
【问题描述】:

我正在尝试在递归函数中使用 ArrayList。 我试图找到大小为 r 的数组 arr 的组合。就像我有一个数组一样

["A","B","C","D"]

我要打印:

A B C
A B D
A C D
B C D

但是当我在递归函数中打印我的 ArrayList 时,它会给出:

Call1 : ABC
Call2 : ABD
        ABD

等等。即每次ArrayList 的先前内容被新内容覆盖并且新内容也被添加到末尾。 同样在调用递归函数的函数中,我的 ArrayList 没有返回,它只包含一个 Es 列表。

在调用递归函数的函数中,我有类似的东西

private static void combine(String[] arr, int r) {
    String[] res = new String[r];
    ArrayList<String[]> result = new ArrayList<String[]>();
    doCombine(arr, res, 0, 0, r, result);
    System.out.println("\nIn main" + result.size());
    for (Object[] array : result) {
        for (Object o : array)
            System.out.print("item: " + o);
        System.out.println();
    }
}

// This recursive function finds combinations
private static void doCombine(String[] arr, String[] res, int currIndex,
  int level, int r, ArrayList<String[]> result) {

    if (level == r) {
        printArray(res);
        String[] inter = new String[r];
        inter = res;
        result.add(inter);
        // Tryinh to see wht the array list has every time
        for (Object[] array : result) {
            for (Object o : array) {
                System.out.print("item: " + o);
            }
            System.out.println();
        }
        inter = null;
        return;
    }
    for (int i = currIndex; i < arr.length; i++) {
        counter.add();
        res[level] = arr[i];
        doCombine(arr, res, i + 1, level + 1, r, result);
    }
}

请告诉我我做错了什么。

【问题讨论】:

  • 编辑:我不知道我需要的组合大小。即在这里我给出了 3 的示例,我可能需要 2 或 4 或 5
  • 编辑 2:这是我的 printArray() private static void printArray(String[] res) { for (int i = 0; i
  • 编辑 3:我创建了一个类计数器,只是为了计算找到的组合数。这是代码:class variable { public int count;变量(int a){ this.count = a; } public void add() { this.count ++; } public void print() { System.out.println("计数器是"+this.count); } }
  • 您上次编辑的目的是什么?我回滚了,因为删除的分号会导致编译器错误。

标签: java recursion arraylist


【解决方案1】:

修改代码

    String[] inter = new String[r];
    inter = res;
    result.add(inter);

        String[] inter = new String[r];
        int k=0;
        for(String s:res){
            inter[k] = s;
            k++;
        }
        result.add(inter);

并且代码按预期工作。

输出:

1

A B C

2

A B C

A B D

3

A B C

A B D

A C D

4

A B C

A B D

A C D

B C D

【讨论】:

  • 天哪,不要重新发明轮子:System.arraycopy
  • 如果您的问题已解决,请接受答案,以便此问题不会显示在未回答部分。
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
相关资源
最近更新 更多