Java添加int的列表
我有一个关于我在下面发布的函数的问题。 它做它应该做的,甚至打印出正确的值。 然而,出于某种原因,它也抛出了一个异常。有人知道为什么吗 该函数应该将所有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
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)
ifl.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;
}