我是java的新手,并且希望程序删除具有特定位置的元素。我知道有很多可能的答案,但我在这里尝试自己的答案。 我收到了错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at
Array.DeleteElement.delete(DeleteElement.java:24)
at
Array.DeleteElement.main(DeleteElement.java:14)
现在我在这里传递数组和位置。哪里得到不正确的索引。根据文档,它表示已使用非法索引访问数组。 任何人都可以解释一下这是非法的,以及我在哪里出错。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//int[] delArray = new int[15];
int[] delArray = {20,50,60,9,8,7,1,5,3};
System.out.println("Enter Element you want to delete");
int del = in.nextInt();
int pos = InsertSearch.searchKey(delArray,del);
System.out.println(pos);
if(pos != -1){
delete(delArray,del,pos);
for(int i=0; i<delArray.length; i++)
System.out.println(delArray[i]);
}
else
System.out.println(del+"Not exist in array");
}
public static int delete(int delArr[], int del, int pos){
for(int i=pos; i<delArr.length; i++)
delArr[i] = delArr[i+1];
return delArr.length -1;
}
答案 0 :(得分:1)
下面
delArr[i] = delArr[i+1];
当i
等于8
时,i+1
会生成9
,这会产生异常
答案 1 :(得分:1)
看,
l1<-as.matrix(c(1,2))
l2<-as.matrix(c(3,4))
l3<-as.matrix(c(5,6))
l4<-as.matrix(c(1,2))
l5<-as.matrix(c(3,4))
l6<-as.matrix(c(5,6))
ll1<-list(l1,l2,l3)
ll2<-list(l4,l5,l6)
lll<-list(ll1,ll2)
lll
[[1]]
[[1]][[1]]
[,1]
[1,] 1
[2,] 2
[[1]][[2]]
[,1]
[1,] 3
[2,] 4
[[1]][[3]]
[,1]
[1,] 5
[2,] 6
[[2]]
[[2]][[1]]
[,1]
[1,] 1
[2,] 2
[[2]][[2]]
[,1]
[1,] 3
[2,] 4
[[2]][[3]]
[,1]
[1,] 5
[2,] 6
在此循环中,public static int delete(int delArr[], int del, int pos){
for(int i=pos; i<delArr.length; i++)
delArr[i] = delArr[i+1]; //<---- HERE
return delArr.length -1;
}
上升到数组的最大索引,但在内部,您访问i
元素,在这种情况下会导致i+1
被抛出。
从堆栈跟踪中,您可以读取,您尝试访问第9个元素,但您的数组只有0到8的索引,包括
答案 2 :(得分:1)
这段代码是问题
for(int i=pos; i<delArr.length; i++)
delArr[i] = delArr[i+1];
准确地说,delArr[i] = delArr[i+1]
。问题是i+1
在Java中,数组中的索引以0开头,而最后一个索引是N-1,对于长度为N的数组。
你循环应该是for(int i=pos; i<delArr.length-1; i++)
。