Java添加int列表

时间:2015-11-17 08:51:02

标签: java list

我对我发布的功能有疑问。 它做了它应该做的事情,甚至打印出正确的价值。 但由于某种原因,它也会引发异常。有谁知道为什么?

函数应该在列表中添加所有int值。

public int addRecursive(List<Integer> l){
    if(l.size()!=1){
        l.add(l.get(0)+l.get(1));
        l.remove(1);
        l.remove(0);
        addRecursive(l);
    }
return  l.get(0);
}

6 个答案:

答案 0 :(得分:0)

你最终会在结尾处有一个空列表:

l.add(l.get(0)+l.get(1));

它的运行你会很快离开范围例外。

所以代替:

if(l.size() != 1)

你应该使用:

if(l.size() > 0)

答案 1 :(得分:0)

如果if(l.size()!=1) l.size()== 0

,则问题为IndexOutOfBoundException
public static int addRekursive(List<Integer> l) {

  if (l != null && !l.isEmpty()){
     if (l.size() > 1) {
         l.add(l.get(0) + l.get(1));
         l.remove(1);
         l.remove(0);
         addRekursive(l);
     }
     return l.get(0);
   } else {
     return 0;
   }
}

答案 2 :(得分:0)

如果列表大小为0,则会引发IndexOutOfBoundException,您必须修改代码以避免它(-1表示没有更多元素,如果需要则返回任何其他值),如下所示

public static int addRekursive(List<Integer> l) {
    if (l.size() >= 1) {
        l.add(l.get(0) + l.get(1));
        l.remove(1);
        l.remove(0);
        addRekursive(l);
    }

    if (l.size() > 0) {
        return l.get(0);
    } else {
        return -1;
    }
}

答案 3 :(得分:0)

我试过这个。它工作得很好。(java版1.8.0_60

public static void main(String[] args) {

        List<Integer> l = new ArrayList<Integer>();
        l.add(12);
        l.add(13);
        l.add(14);
        l.add(15);
        System.out.println(addRekursive(l));

    }

    public static int addRekursive(List<Integer> l) {
        if (l.size() != 1) {
            l.add(l.get(0) + l.get(1));
            l.remove(1);
            l.remove(0);
            addRekursive(l);
        }
        return l.get(0);
    }

输出

54

答案 4 :(得分:0)

可能是因为if条件。如果列表l为空,则大小将为零,并且将执行if-scope中的语句。此外,如果列表为null,则执行l.getSize()将抛出空指针异常。因此,请尝试使用下面的代码,看看是否仍然抛出异常。

public int addRekursive(List<Integer> l){
     if(l != null && l.size() > 1){
          l.add(l.get(0)+l.get(1));
          l.remove(1);
          l.remove(0);
          addRekursive(l);
     }

     if(l != null){
          return  l.get(0);
     }

     return null;

}

答案 5 :(得分:0)

为了避免任何异常,您应该测试列表是否为空我使用org.apache.commons.collections.CollectionUtils

并为相同功能return addRekursive(l);

的调用添加一个返回语句
public int addRekursive(List<Integer> l) {
    if (CollectionUtils.isNotEmpty(l)) {
        if (l.size() > 1) {
            l.add(l.get(0) + l.get(1));
            l.remove(1);
            l.remove(0);
            return addRekursive(l);
        } else {
            return l.get(0);
        }
    }
    return 0;
}

如果您传递一个空列表,那么结果会得到0