Java 类型ArrayList中的方法add(ArrayList)不适用于参数(void)

Java 类型ArrayList中的方法add(ArrayList)不适用于参数(void),java,arraylist,Java,Arraylist,我试图解决一个问题,得到子集S=[1,2,3]的所有集合。 我用递归来解决这个问题。我正在尝试创建一个空的ArrayList,其中包含一个基格中的空列表。在制作自己的ans时,上面提到的编译时错误 我已经尝试了eclipse建议addAll,但仍然得到了错误 public static ArrayList<ArrayList<Integer>> relatedSubSets(ArrayList<Integer> A, int index){ if(in

我试图解决一个问题,得到子集S=[1,2,3]的所有集合。 我用递归来解决这个问题。我正在尝试创建一个空的ArrayList,其中包含一个基格中的空列表。在制作自己的ans时,上面提到的编译时错误

我已经尝试了eclipse建议addAll,但仍然得到了错误

public static ArrayList<ArrayList<Integer>> relatedSubSets(ArrayList<Integer> A, int index){
    if(index == A.size()){
        ArrayList<ArrayList<Integer>> br=new ArrayList<ArrayList<Integer>();
        ArrayList<Integer> emptyList=new ArrayList<Integer>();
        br.add(emptyList); //Making an arraylist containing empty list
        return br;``
    }
    ArrayList<ArrayList<Integer>> rr=relatedSubSets(A,index+1); // Getting the recursion result in it.
    ArrayList<ArrayList<Integer>> mr=new ArrayList<>();
    for(int i=0;i<rr.size();i++){
        ArrayList<Integer> ans=rr.get(i);
        mr.add(ans);
        mr.add(ans.add(0,A.get(index)));  //Error in this line of the code
    }
    System.out.println(mr);
    return mr;
}

预期输出为所有子集。获取编译时错误,但是。

编译器在检测错误方面做得非常好:

您错过了额外的>符号:

    // wrong:
    ArrayList<ArrayList<Integer>> br=new ArrayList<ArrayList<Integer>();
    // ok: 
    ArrayList<ArrayList<Integer>> br=new ArrayList<ArrayList<Integer>>(); 
请注意和。添加。。。返回一个布尔值,因此您可能需要如下内容:

ans.add(0, A.get(index));
mr.add(ans);
然而,在这种情况下,请认为引用是可变的,因此如果稍后更改ans数组,那么mr的元素也将更改。。。因此,在循环中只需要前面提到的两行:

for(int i=0;i<rr.size();i++){
     ArrayList<Integer> ans=rr.get(i);
     mr.add(ans);
     ans.add(0,A.get(index));       
 }
现在编译完成了,技术部分已经解决,您可以集中精力解决任务的逻辑部分,祝您好运:

mr.addans.add0,A.getindex//此代码行中出现错误

您正在尝试将void返回值添加到arraylist。List add方法返回void。所以你得到了以下错误

类型ArrayList>中的方法addArrayList不适用于参数void

试试下面

ans.add(0,A.get(index)); //Add Integer to ArrayList
mr.add(ans); //Add ArrayList<Integer> to ArrayList

这都是真的。但既然代码中已经有addans先生;,OP似乎不太可能想重复这一行。是的,这就是为什么我写OP只需要循环中的两行,我会稍微细化它。因为这显然是一个平等目的的问题,我故意不想提供一个有效的解决方案。。。
ans.add(0,A.get(index)); //Add Integer to ArrayList
mr.add(ans); //Add ArrayList<Integer> to ArrayList