我对我发布的功能有疑问。 它做了它应该做的事情,甚至打印出正确的价值。 但由于某种原因,它也会引发异常。有谁知道为什么?
函数应该在列表中添加所有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);
}
答案 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
。