运行此代码在行中为我提供了一个数组超出范围的异常:
int sum = array[k]+array[l]; //sum of l and k
...应该是一个简单的修复,但我无法弄清楚可能导致它的原因,因为我正在使用array.length来绑定循环。有人可以帮忙吗?
P.S。对于记录,此代码应该在int数组中搜索等于int的int或单个int的对。它仅使用println工作,但我试图将添加到目标的数字放入向量中。
public Vector<Vector<Integer>> subsetSum(int[] array, int target) {
//creates vectors, adds inner vector to another vector
outer = new Vector<Vector<Integer>>();
inner = new Vector<Integer>();
outer.add(inner);
for (int k = 0; k <= array.length; k++) {
for (int l = 0; l <= array.length; l++) {
int sum = array[k]+array[l]; //sum of l and k
int i = 0;
if (sum == target) {
inner.add(i, array[l]);
inner.add(i, array[k]);
i++;
//prints combination
System.out.println(array[l]+"+"+array[k]+"="+target);
}
if (k == target) {
inner.add(i, array[k]);
i++;
//prints if int equals target
System.out.println(k+"="+target);
}
if (l == target) {
inner.add(i, array[l]);
i++;
//prints if int equals target
System.out.println(l+"="+target);
}
}
}
//return combinations that add up to target in vector form
System.out.println(outer);
return outer;
}
答案 0 :(得分:7)
你需要使用“&lt;”而不是你的for循环中的“&lt; =”。
由于数组中的第一个位置为0,因此最后一个位置为length-1。发生的事情是,当你到达最后一次迭代时,索引已经超出了数组的范围。
例如,如果你有一个数组:
array = [0,1,2,3]最后一次迭代将是数组[4],即数组的长度,超出范围。
答案 1 :(得分:2)
&lt; =应替换为&lt;
答案 2 :(得分:0)
将您的循环更改为:
for (int k = 0; k < array.length; k++)
和
for (int l = 0; l < array.length; l++)
由于数组是从0开始的,所以你希望比长度小1。