如何使用非法索引访问数组

时间:2017-04-18 17:00:46

标签: java arrays

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

3 个答案:

答案 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++)