线程中的java编程异常;“主要”;这个错误是什么?
我编写这个程序是为了找到项目,然后删除所有小于项目的元素。没有编译错误,但是当我运行程序时,会出现以下消息线程中的java编程异常;“主要”;这个错误是什么?,java,arraylist,Java,Arraylist,我编写这个程序是为了找到项目,然后删除所有小于项目的元素。没有编译错误,但是当我运行程序时,会出现以下消息 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)
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;
导入java.util.Scanner;
公共类bb{
公共静态布尔删除值(ArrayList,int项)
{int p=list.indexOf(项目);
如果(!list.contains(项))
返回false;
其他的
for(int i=p;ilist.get(i+1))
删除(p);
列表。删除(i+1);
}
返回true;
}
公共静态void main(字符串[]args){
ArrayList a=新的ArrayList(8);
a、 增加(3);
a、 增加(10);
a、 增加(4);
a、 增加(5);
a、 增加(3);
a、 增加(2);
a、 增加(8);
a、 增加(6);
a、 增加(4);
如果(删除值(a,4))
for(int x:a)
系统输出打印(x+“”);
}
}
列表。删除(i+1)代码>将超过列表的大小。例如,当您传递第4个元素时,它将在5th
位置搜索该元素deleteValues
方法循环i
从p
到list.size()-1
,但循环体包含list.get(i+1)
和list.remove(i+1)
,因此当i==list.size()-1
时,list.get(i+1)
和list.remove(i+1)
将尝试从列表中不存在的索引中访问项目,这是异常的原因
删除比传递的项小的元素需要迭代列表中的所有元素,并将每个元素与传递的项进行比较。请注意,当您从列表中删除第i个元素时,(i+1)个元素将成为新的第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;
}
公共静态布尔删除值(ArrayList列表,int项)
{
INTP=列表索引(项目);
如果(p问题在于deleteValues
函数,当i
小于ArrayList
的大小时循环,但当调用get
函数时添加1,这会导致IndexOutOfBoundsException
,因为它可以使i
等于ArrayList的大小,即无效。请更改for循环,并删除具有i+1
的情况,如下所示:
for(int i=p; i<list.size();i++ )
{
int n=list.get(i);
if (n>list.get(i))
list.remove(p);
list.remove(i);
}
for(int i=p;ilist.get(i))
删除(p);
列表。删除(i);
}
此外,如果您的函数要删除某个值的所有副本,则代码可以非常简单、清晰:
public static boolean deleteValues(ArrayList<Integer> list, int item)
{
if (list.contains(item))
{
for (int i = 0; i < list.size(); i++)
if (list.get(i) == item)
list.remove(i);
return true;
}
return false;
}
公共静态布尔删除值(ArrayList列表,int项)
{
if(列表包含(项目))
{
对于(int i=0;i
导入java.util.ArrayList;
导入java.util.Scanner;
公共类{
公共静态布尔删除值(ArrayList列表)
{
for(int i=0;ilist.get(i+1))
//列表。删除(i);
列表。删除(i+1);
}
返回true;
}
公共静态void main(字符串[]args){
ArrayList a=新的ArrayList(8);
a、 增加(3);
a、 增加(10);
a、 增加(4);
a、 增加(5);
a、 增加(3);
a、 增加(2);
a、 增加(8);
a、 增加(6);
//a.加入(4);
如果(删除值(a))
for(int x:a)
系统输出打印(x+“”);
}
}
您正在使用指定的itz大小向arraylist添加一个额外的对象,并且在deleteValues方法中错误地使用了索引值,所以请使用这两个代码进行plz检查
import java.util.ArrayList;
import java.util.Scanner;
public class Ex {
public static boolean deleteValues(ArrayList<Integer> list, int item)
{ int p =list.indexOf(item);
if(!list.contains(item))
return false;
else
for(int i=0; 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+ " ");
}
}
import java.util.ArrayList;
导入java.util.Scanner;
公共类{
公共静态布尔删除值(ArrayList,int项)
{int p=list.indexOf(项目);
如果(!list.contains(项))
返回false;
其他的
for(int i=0;ilist.get(i+1))
删除(p);
//列表。删除(i+1);
}
返回true;
}
公共静态void main(字符串[]args){
ArrayList a=新的ArrayList(8);
a、 增加(3);
a、 增加(10);
a、 增加(4);
a、 增加(5);
a、 增加(3);
a、 增加(2);
a、 增加(8);
//a、 增加(6);
a、 增加(4);
如果(删除值(a,4))
for(int x:a)
系统输出打印(x+“”);
}
}
8的初始容量无关紧要,因为ArrayList的大小会在需要时自动增加。我同意,我不知道在发布该评论时我在哪里丢失了!+1。
import java.util.ArrayList;
import java.util.Scanner;
public class Ex {
public static boolean deleteValues(ArrayList<Integer> list)
{
for(int i=0; i<list.size();i++ )
{int n=list.get(i);
if (n>list.get(i+1))
// list.remove(i);
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))
for(int x : a)
System.out.print(x+ " ");
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class Ex {
public static boolean deleteValues(ArrayList<Integer> list, int item)
{ int p =list.indexOf(item);
if(!list.contains(item))
return false;
else
for(int i=0; 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+ " ");
}
}