gpt4 book ai didi

java编程线程异常 "main"这个错误是什么?

转载 作者:行者123 更新时间:2023-11-30 03:40:52 25 4
gpt4 key购买 nike

我编写这个程序是为了查找该项目,然后删除所有小于该项目的元素。没有编译错误,但是当我运行程序时,出现以下消息。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.remove(ArrayList.java:492)
at bb.deleteValues(bb.java:15)
at bb.main(bb.java:33)

Process completed. "

代码:

import java.util.ArrayList;
import java.util.Scanner;


public class bb {
public static boolean deleteValues(ArrayList<Integer> list, int item)
{ int p =list.indexOf(item);
if(!list.contains(item))
return false;
else
for(int i=p; i<list.size();i++ )
{int n=list.get(i);
if (n>list.get(i+1))
list.remove(p);
list.remove(i+1);

}
return true;

}

public static void main(String[] args) {
ArrayList<Integer> a= new ArrayList<Integer>(8);
a.add(3);
a.add(10);
a.add(4);
a.add(5);
a.add(3);
a.add(2);
a.add(8);
a.add(6);
a.add(4);
if(deleteValues(a,4))
for(int x : a)
System.out.print(x+ " ");



}
}

最佳答案

您的 deleteValues 方法将 ip 循环到 list.size()-1,但循环的body 包含 list.get(i+1)list.remove(i+1),因此当 i==list.size()-1list.get(i+1)list.remove(i+1) 将尝试从列表中不存在的索引访问项目,这就是异常的原因。

删除小于传递项的元素需要迭代列表中的所有元素,并将每个元素与传递的项进行比较。请注意,当您从列表中删除第 i 个元素时,第 (i+1) 个元素将成为新的第 i 个元素。这就是为什么只有当您不从列表中删除元素时才应该增加 i 。

public static boolean deleteValues(ArrayList<Integer> list, int item)
{
int p = list.indexOf(item);
if(p<0)
return false;
for(int i=0; i<list.size();) {
if (list.get(i) < item) {
list.remove(i);
} else {
i++;
}
}
return true;
}

关于java编程线程异常 "main"这个错误是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26859714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com