【发布时间】:2022-03-04 18:40:45
【问题描述】:
我正在尝试查找数组的子集。例如,如果数组是 [1,2] 我正在尝试打印以下内容:
[1][2]
[1]
[2]
null
我写的代码如下:
import java.util.*;
class PrintArray {
public static void printme(int a[], int pos, int size) {
if (pos >= size)
return;
else
System.out.println(a[pos]);
pos++;
printme(a, pos, size);
}
public static void generate(int a[], ArrayList<Integer> list, int pos, int size) {
if (pos > size) {
for (int i = 0; i < list.size() - 1; i++) {
System.out.print("[" + list.get(i) + "]");
}
System.out.println();
return;
}
list.add(a[pos]);
generate(a, list, pos + 1, size);
list.remove(list.size() - 1);
generate(a, list, pos + 1, size);
}
public static void main(String args[]) {
int ar[] = { 1, 2, 3, 4, 5 };
// printme(ar, 0, ar.length);
ArrayList<Integer> list = new ArrayList<Integer>();
generate(ar, list, 0, ar.length);
}
}
但是我遇到了以下 OOBE 错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds
这可以通过检查 pos>=size 而不是 pos>size 来解决,但这样的更改不会生成所有子数组。
后续问题是我得到了重复的输出,如下所示:
[2][3][4]
[2][3]
[2][3]
[2]
[2][4]
[2]
[2]
有人可以帮我解决这两个问题吗?
【问题讨论】: