Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用非法索引访问数组_Java_Arrays - Fatal编程技术网

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

Java 如何使用非法索引访问数组,java,arrays,Java,Arrays,我是java新手,正在编写一个程序来删除具有特定位置的元素。我知道有很多可能的答案,但我在这里尝试我自己的。 我得到一个错误: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 at Array.DeleteElement.delete(DeleteElement.java:24)

我是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;
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
//int[]delArray=新int[15];
int[]delArray={20,50,60,9,8,7,1,5,3};
System.out.println(“输入要删除的元素”);
int del=in.nextInt();
int pos=InsertSearch.searchKey(delArray,del);
系统输出打印项次(pos);
如果(位置!=-1){
删除(delArray、del、pos);
对于(inti=0;i此处

i
等于
8
时,
i+1
给出
9
,这将生成异常外观

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;
}
公共静态int-delete(int-delArr[],int-del,int-pos){

对于(inti=pos;i来说,这段代码是个问题

for(int i=pos; i<delArr.length; i++)
    delArr[i] = delArr[i+1];

for(int i=pos;iOh..明白了。这意味着当它尝试访问最后一个索引时,
del[i+1]
没有得到。完美的解释。谢谢。很抱歉,我不知道如何读取堆栈跟踪。任何关于堆栈跟踪的链接都会有帮助。@shankysingh Ya,我得到了想要的结果。8分钟后将接受答案:)@shankysingh很酷,谢谢。另外,专业提示-使用括号,即使它们不是强制性的。包装{单线}
for(int i=pos; i<delArr.length; i++)
    delArr[i] = delArr[i+1];