问题:
你有一个正整数和负整数数组,打印所有子集,它等于零。
我在这里只实现了一个简单的测试用例,我得到的例外是ArrayIndexOutOfBoundsException
。
请帮助为什么值不会增加。
package app;
public class Array1
{
public static void subset(int p[])
{
int u = 0;
int s[] = new int[p.length];
if (p[0] < 0)
for (int i=0;i<p.length;i++)
{
for (int j = 0; j < p.length; j++) {
int k = p[i] + p[j];
if (k == 0)
{
System.out.println(p[i]);
System.out.println(p[j]);
s[u] = p[i];
u++; // Why u value is not incremented?
System.out.println(s[u]);
s[u] = p[j];
u++; // Why u value is not incremented?
System.out.println(s[u]);
}
}
}
for(int i = 0; i < s.length; i++)
System.out.println(s[i]);
}
public static void main(String s[])
{
subset(new int[] {-1, -2, -3, -4, 4, 3, 2, 1});
}
}
答案 0 :(得分:1)
问题是,int s[]=new int[p.length];
因为对的数量可以更多(输入数组长度本身)是你获得ArrayIndexOutOfBoundsException
的原因。
您可以使用动态列表来实现此目的:
List<Integer> s = new ArrayList<Integer>();
// s.add(<elem>); // no need for variable u - increment :)