Java 未在特定位置插入元素

Java 未在特定位置插入元素,java,arrays,Java,Arrays,我试图在特定位置插入一个元素,但代码抛出了一个错误 java.lang.ArrayIndexOutOfBoundsException 我是java新手,任何人都可以帮我更正代码。我知道在insertar[I+1]=insertar[I]中做错了什么。任何帮助都算是好的帮助 我的代码 public static void main(String[] args) { Scanner in = new Scanner(System.in); int[] insertAr

我试图在特定位置插入一个元素,但代码抛出了一个错误

java.lang.ArrayIndexOutOfBoundsException

我是java新手,任何人都可以帮我更正代码。我知道在
insertar[I+1]=insertar[I]中做错了什么。任何帮助都算是好的帮助

我的代码

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int[] insertArr = {10,30,20,40,60,50,90,70,80};
        Arrays.sort(insertArr);
        int arrLength = insertArr.length;
        System.out.println("At what position you want to insert");
        int pos = in.nextInt();
        System.out.println("What element you want to insert");
        int key = in.nextInt();
        insertPosition(insertArr,arrLength,pos,key);
        for(int num : insertArr){
            System.out.println(num);
        }
    }
    public static int insertPosition(int insertArr[],int arrLength, int pos, int key){
        if(pos > arrLength)
            return arrLength;
        for(int i=arrLength-1; i>=(pos-1); i--)
            insertArr[i+1] = insertArr[i];
        insertArr[pos-1] = key;
        return arrLength;
    }

数组的长度在Java中是不可变的,您必须使用某种类型的集合,如List/ArrayList

数组的长度在Java中是不可变的,您必须使用某种类型的集合,如List/ArrayList

您需要确保i小于insertArray长度且大于零

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] insertArr = {10, 30, 20, 40, 60, 50, 90, 70, 80};
    Arrays.sort(insertArr);
    System.out.println("At what position you want to insert");
    int pos = in.nextInt();
    System.out.println("What element you want to insert");
    int key = in.nextInt();
    insertPosition(insertArr, pos, key);

    Arrays.stream(insertArr).forEach(System.out::println);
}

public static void insertPosition(int insertArr[], int pos, int key) {
    if (pos >= insertArr.length)
        return;
    for (int i = insertArr.length - 1; i > (pos - 1) && i < insertArr.length -1; i--)
        insertArr[i + 1] = insertArr[i];
    insertArr[pos - 1] = key;
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int[]insertArr={10,30,20,40,60,50,90,70,80};
Arrays.sort(insertArr);
System.out.println(“要插入的位置”);
int pos=in.nextInt();
System.out.println(“要插入的元素”);
int key=in.nextInt();
插入位置(插入器、位置、键);
Arrays.stream(insertArr.forEach(System.out::println);
}
公共静态void insertPosition(int-insertArr[],int-pos,int-key){
如果(位置>=插入器长度)
返回;
对于(int i=insertar.length-1;i>(pos-1)和&i
在java中,数组的长度是不可变的,当您从不存在的索引中调用元素时,会出现此异常。为了避免在for循环中出现这种情况,您正在检查i
或i
其次,您的插入方法可以简化,如上所述。

您需要确保i小于insertArray长度且大于零

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] insertArr = {10, 30, 20, 40, 60, 50, 90, 70, 80};
    Arrays.sort(insertArr);
    System.out.println("At what position you want to insert");
    int pos = in.nextInt();
    System.out.println("What element you want to insert");
    int key = in.nextInt();
    insertPosition(insertArr, pos, key);

    Arrays.stream(insertArr).forEach(System.out::println);
}

public static void insertPosition(int insertArr[], int pos, int key) {
    if (pos >= insertArr.length)
        return;
    for (int i = insertArr.length - 1; i > (pos - 1) && i < insertArr.length -1; i--)
        insertArr[i + 1] = insertArr[i];
    insertArr[pos - 1] = key;
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int[]insertArr={10,30,20,40,60,50,90,70,80};
Arrays.sort(insertArr);
System.out.println(“要插入的位置”);
int pos=in.nextInt();
System.out.println(“要插入的元素”);
int key=in.nextInt();
插入位置(插入器、位置、键);
Arrays.stream(insertArr.forEach(System.out::println);
}
公共静态void insertPosition(int-insertArr[],int-pos,int-key){
如果(位置>=插入器长度)
返回;
对于(int i=insertar.length-1;i>(pos-1)和&i
在java中,数组的长度是不可变的,当您从不存在的索引中调用元素时,会出现此异常。为了避免在for循环中出现这种情况,您正在检查i或i
其次,可以简化插入方法,如上所述。

问题在于这段代码:

for(int i=arrLength-1; i>=(pos-1); i--)
    insertArr[i+1] = insertArr[i];

在第一次迭代中,您访问的
insertar[arrLength]
超过了数组的最后一个索引。因此,您应该从
i=arrLength-2开始迭代

问题出在这段代码中:

for(int i=arrLength-1; i>=(pos-1); i--)
    insertArr[i+1] = insertArr[i];

在第一次迭代中,您访问的
insertar[arrLength]
超过了数组的最后一个索引。因此,您应该从
i=arrLength-2开始迭代

首先必须从变量pos中减去1,并验证它是否在数组长度范围内

您的代码应该如下所示:

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] insertArr = { 10, 30, 20, 40, 60, 50, 90, 70, 80 };
    Arrays.sort(insertArr);
    int arrLength = insertArr.length;
    System.out.println("At what position you want to insert");
    int pos = in.nextInt();
    System.out.println("What element you want to insert");
    int key = in.nextInt();
    insertPosition(insertArr, arrLength, pos, key);
    for (int num : insertArr) {
        System.out.println(num);
    }
}

public static int insertPosition(int insertArr[], int arrLength, int pos, int key) {

    pos = pos - 1;

    if (pos >= arrLength || pos < 0)
        return arrLength;

    for (int i = arrLength - 1; i >= pos; i--) {
        insertArr[i] = insertArr[i];
    }
    insertArr[pos] = key;

    return arrLength;
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int[]insertArr={10,30,20,40,60,50,90,70,80};
Arrays.sort(insertArr);
int arrLength=insertar.length;
System.out.println(“要插入的位置”);
int pos=in.nextInt();
System.out.println(“要插入的元素”);
int key=in.nextInt();
insertPosition(insertArr、arrLength、pos、key);
for(int num:insertArr){
系统输出打印项数(num);
}
}
公共静态int-insertPosition(int-insertArr[],int-arrLength,int-pos,int-key){
pos=pos-1;
如果(位置>=arrLength | |位置<0)
返回长度;
对于(int i=arrLength-1;i>=pos;i--){
插入器[i]=插入器[i];
}
insertArr[pos]=键;
返回长度;
}

首先必须从变量pos中减去1,并验证它是否在数组长度范围内

您的代码应该如下所示:

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] insertArr = { 10, 30, 20, 40, 60, 50, 90, 70, 80 };
    Arrays.sort(insertArr);
    int arrLength = insertArr.length;
    System.out.println("At what position you want to insert");
    int pos = in.nextInt();
    System.out.println("What element you want to insert");
    int key = in.nextInt();
    insertPosition(insertArr, arrLength, pos, key);
    for (int num : insertArr) {
        System.out.println(num);
    }
}

public static int insertPosition(int insertArr[], int arrLength, int pos, int key) {

    pos = pos - 1;

    if (pos >= arrLength || pos < 0)
        return arrLength;

    for (int i = arrLength - 1; i >= pos; i--) {
        insertArr[i] = insertArr[i];
    }
    insertArr[pos] = key;

    return arrLength;
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int[]insertArr={10,30,20,40,60,50,90,70,80};
Arrays.sort(insertArr);
int arrLength=insertar.length;
System.out.println(“要插入的位置”);
int pos=in.nextInt();
System.out.println(“要插入的元素”);
int key=in.nextInt();
insertPosition(insertArr、arrLength、pos、key);
for(int num:insertArr){
系统输出打印项数(num);
}
}
公共静态int-insertPosition(int-insertArr[],int-arrLength,int-pos,int-key){
pos=pos-1;
如果(位置>=arrLength | |位置<0)
返回长度;
对于(int i=arrLength-1;i>=pos;i--){
插入器[i]=插入器[i];
}
insertArr[pos]=键;
返回长度;
}

为什么不这样使用:insertar.add(pos,key);我正在尝试做一些编码练习,以便为排序数组编写我自己的方法。除了编写自己的代码,我建议您阅读一些标准代码。它们中的大多数都包含评论,有很好的文档记录,并且关心许多你以前甚至不知道的事情;)至少,它对我有帮助。为什么不这样使用:insertar.add(pos,key);我正在尝试做一些编码练习,以便为排序数组编写我自己的方法。除了编写自己的代码,我建议您阅读一些标准代码。大部分都有评论,,