ArrayList <ArrayList <Integer >>类型的方法add(ArrayList <Integer>)不适用于参数(void)

时间:2019-11-04 04:39:22

标签: java arraylist

我正在尝试解决获取子集S = [1,2,3]的所有集合的问题。 我正在使用递归来解决这个问题。我正在尝试在基本案例中创建一个包含EmptyList的空ArrayList。在制作自己的ans时,我上面提到的是编译时错误。

我已经尝试过蚀建议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;
}

预期输出是所有子集。但是出现编译时错误。

2 个答案:

答案 0 :(得分:1)

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

您错过了额外的“>”符号:

    // wrong:
    ArrayList<ArrayList<Integer>> br=new ArrayList<ArrayList<Integer>();
    // ok: 
    ArrayList<ArrayList<Integer>> br=new ArrayList<ArrayList<Integer>>(); 

现在,由于以下原因,它仍然无法编译:

mr.add(ans.add(0,A.get(index)));

请注意,and.add(...)返回一个boolean,因此您可能想要这样的内容:

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));       
 }

现在可以编译了,所以“技术”部分已解决,您可以集中精力解决任务的“逻辑”部分,祝您好运:)

答案 1 :(得分:0)

mr.add(ans.add(0,A.get(index))); //代码这一行中的错误

您正在尝试将void返回值添加到arraylist。列表添加方法返回void。所以您遇到以下错误,

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

尝试下面,

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