Java 在数组中的特定索引处插入项-IndexOutOfBounds异常

Java 在数组中的特定索引处插入项-IndexOutOfBounds异常,java,arrays,oop,indexoutofboundsexception,Java,Arrays,Oop,Indexoutofboundsexception,此功能应在选定索引处添加一个元素,并向下推数组中的所有其他元素。例如,假设我有以下数组: [0] = zero [1] = one [2] = two 如果在索引0处添加另一个名为NEWZERO的元素,则数组必须如下所示: [0] = NEWZERO [1] = zero [2] = one [3] = two 但目前我得到了IndexOutOfBounds异常,它不起作用,尽管我的数组比3个元素大得多 另外,我不想使用内置的ArrayList库,它会自动为您执行此操作 public v

此功能应在选定索引处添加一个元素,并向下推数组中的所有其他元素。例如,假设我有以下数组:

[0] = zero
[1] = one
[2] = two
如果在索引0处添加另一个名为NEWZERO的元素,则数组必须如下所示:

[0] = NEWZERO
[1] = zero 
[2] = one 
[3] = two
但目前我得到了IndexOutOfBounds异常,它不起作用,尽管我的数组比3个元素大得多

另外,我不想使用内置的ArrayList库,它会自动为您执行此操作

public void insert(int i, String s) {

if (array[i] == null) {
    array[i] = s; //Need to add feature that instantly puts the element at the first available spot on the list.
} else { 
    for (int j = i; j < array.length; j++) { //Can't use >= i
        array[j + 1] = array[j]; //THIS IS WHERE I GET THE ERROR.

        if (j == array.length - 1) { 
            break;
        } 
    }
    array[i] = s;
    extendArray(); //If an element is inserted properly, the array becomes array.length + 1
public void插入(int i,字符串s){
if(数组[i]==null){
array[i]=s;//需要添加一个特性,可以立即将元素放在列表中第一个可用的位置。
}否则{
对于(int j=i;j=i
array[j+1]=array[j];//这就是我得到错误的地方。
如果(j==array.length-1){
打破
} 
}
数组[i]=s;
extendArray();//如果元素插入正确,数组将变为array.length+1
我没有收到错误,因为我的数组中没有空间。即使我有一个包含20个元素的数组,并且我只使用3个元素,我仍然会收到OutOfBounds错误。这是我的扩展数组方法,用于当用户耗尽数组空间时

public void extendArray() {
    String[] items2 = new String[items.length + 1];
    for (int j = 0; j < items.length; j++) {
        items2[j] = items[j];
    }
    items = items2;
}
public void extendArray(){
String[]items2=新字符串[items.length+1];
对于(int j=0;j
初始化数组时,数组的值范围为0到1

在代码中

for (int j = i; j < array.length; j++) { //Can't use >= i
    array[j + 1] = array[j]; //THIS IS WHERE I GET THE ERROR.
for(int j=i;j=i
array[j+1]=array[j];//这就是我得到错误的地方。
您试图将超出数组边界的值存储到数组[length]

因此,将

for (int j = i; j < array.length - 1; j++) { //Can't use >= i
    array[j + 1] = array[j]; 
for(int j=i;j=i
数组[j+1]=数组[j];

初始化数组时,数组的值范围为0到1

在代码中

for (int j = i; j < array.length; j++) { //Can't use >= i
    array[j + 1] = array[j]; //THIS IS WHERE I GET THE ERROR.
for(int j=i;j=i
array[j+1]=array[j];//这就是我得到错误的地方。
您试图将超出数组边界的值存储到数组[length]

因此,将

for (int j = i; j < array.length - 1; j++) { //Can't use >= i
    array[j + 1] = array[j]; 
for(int j=i;j=i
数组[j+1]=数组[j];

j
到达循环中的
array.length-1
时,
数组[j+1]
超出范围

要解决此问题,请更改停止条件(并消除
中断
,因为它完全没有必要):

for(int j=i;j

最后,您可能希望用对的单个调用替换整个循环。

j
到达
array.length-1
循环中,数组[j+1]
超出范围

要解决此问题,请更改停止条件(并消除
中断
,因为它完全没有必要):

for(int j=i;j

最后,您可能希望用对的单个调用来替换整个循环。

当j在末尾到达时,j+1将越界并导致arrayIndexoutOfBoundException

解决方案:

更改for循环,如下所示

for (int j = i; j < array.length - 1; j++) { //Can't use >= i
array[j + 1] = array[j]; 
}
for(int j=i;j=i
数组[j+1]=数组[j];
}

当j到达末尾时,j+1将超出边界,并导致arrayIndexoutOfBoundException

解决方案:

更改for循环,如下所示

for (int j = i; j < array.length - 1; j++) { //Can't use >= i
array[j + 1] = array[j]; 
}
for(int j=i;j=i
数组[j+1]=数组[j];
}

循环中已经有了
j
的条件,那么为什么需要第二个条件呢?只需使用

for (int j = i; j < array.length - 1; j++) { //Can't use >= i
    array[j + 1] = array[j]; 
}
for(int j=i;j=i
数组[j+1]=数组[j];
}

循环中已经有了
j
的条件,那么为什么需要第二个条件呢?只需使用

for (int j = i; j < array.length - 1; j++) { //Can't use >= i
    array[j + 1] = array[j]; 
}
for(int j=i;j=i
数组[j+1]=数组[j];
}
尝试此修复

    for (int j = i; j < array.length - 1; j++) { //Can't use >= i
        array[j + 1] = array[j]; 
    }
for(int j=i;j=i
数组[j+1]=数组[j];
}
此外,在插入新元素之前扩展数组的大小是有意义的,请尝试此修复

    for (int j = i; j < array.length - 1; j++) { //Can't use >= i
        array[j + 1] = array[j]; 
    }
for(int j=i;j=i
数组[j+1]=数组[j];
}
此外,在插入新元素之前扩展数组的大小也是有意义的