Java 未在特定位置插入元素
我试图在特定位置插入一个元素,但代码抛出了一个错误 java.lang.ArrayIndexOutOfBoundsException 我是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
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其次,可以简化插入方法,如上所述。问题在于这段代码:
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);我正在尝试做一些编码练习,以便为排序数组编写我自己的方法。除了编写自己的代码,我建议您阅读一些标准代码。大部分都有评论,,