Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java添加int的列表_Java_List - Fatal编程技术网

Java添加int的列表

Java添加int的列表,java,list,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); addRecur

我有一个关于我在下面发布的函数的问题。 它做它应该做的,甚至打印出正确的值。 然而,出于某种原因,它也抛出了一个异常。有人知道为什么吗

该函数应该将所有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);
}
public int addRecursive(列表l){
如果(l.size()!=1){
l、 添加(l.get(0)+l.get(1));
l、 移除(1);
l、 移除(0);
add递归(l);
}
返回l.get(0);
}

当出现以下情况时,您最终会得到一个空列表:

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

它跑完了,你会跑出去的,跑出去,例外

因此,不是:

if(l.size() != 1)
你应使用:

if(l.size() > 0)
问题是
if(l.size()!=1)
if
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;
   }
}
public static int addrekursic(列表l){
如果(l!=null&&!l.isEmpty()){
如果(l.size()>1){
l、 添加(l.get(0)+l.get(1));
l、 移除(1);
l、 移除(0);
addRekursive(l);
}
返回l.get(0);
}否则{
返回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;
    }
}
public static int addrekursic(列表l){
如果(l.size()>=1){
l、 添加(l.get(0)+l.get(1));
l、 移除(1);
l、 移除(0);
addRekursive(l);
}
如果(l.size()>0){
返回l.get(0);
}否则{
返回-1;
}
}

我试过这个。它工作得很好。(java版本
1.8.0\u 60


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

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;

}
public int addrekursic(列表l){
如果(l!=null&&l.size()>1){
l、 添加(l.get(0)+l.get(1));
l、 移除(1);
l、 移除(0);
addRekursive(l);
}
如果(l!=null){
返回l.get(0);
}
返回null;
}

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

并在调用相同函数之前添加一个return语句
return addrekursic(l)

public int addrekursic(列表l){
if(CollectionUtils.isNotEmpty(l)){
如果(l.size()>1){
l、 添加(l.get(0)+l.get(1));
l、 移除(1);
l、 移除(0);
返回地址(l);
}否则{
返回l.get(0);
}
}
返回0;
}


如果你通过一个空列表,你会得到
0

哪个
异常
?如果你通过一个emty列表,你会得到超出范围的异常;)您的代码在使用java 1.7.045的my computer中运行正常。列表是否由奇数个元素组成?您正在检查大小是否等于
1
,然后您正在访问
1
索引中的元素,这可能是导致异常的点。这使函数不安全,但是OP说:它做它应该做的,甚至打印出正确的值。然而,出于某种原因,它也抛出了一个异常,这不是
size!=1
因为如果是这样,code将无法打印正确的值根据您的判断,我可以得出下一个结论:“也许引发异常的代码甚至不是这个。我在这里没有看到任何打印行:)他可能在列表中的元素上总是使用一个奇数,这就是它工作的原因。我的意思是,代码不能抛出异常并返回正确的结果…@Jordi Castilla我认为它在某些情况下工作,但在其他情况下不工作,例如,如果您传递一个空列表或
null
!!这使得函数不安全,但OP说:它做它应该做的,甚至打印出正确的值。然而,出于某种原因,它也抛出了一个异常,这不是
size!=1
因为如果是这样,code将无法打印正确的值。当他调用l.get(0)时,问题会出现,列表大小为0,甚至条件“size!”=1'是不正确的,正如我所说,这使函数不安全,但没有解释所描述的行为这使函数不安全,但OP说:它做它应该做的,甚至打印出正确的值。然而,出于某种原因,它也抛出了一个异常,这不是
size!=1
因为如果是这样,代码将无法打印正确的值。如果您添加了一个代码片段,说明如何正确执行该操作,那就好了。@Jordi Castilla这一个呢???@TorbenVerdorben使用此解决方案,即使您通过
null
也不会引发异常,谢谢您的帮助!谢谢你的帮助。。。。我终于让它工作了…只要重新启动eclipse。。。
54
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;

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