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];
}
此外,在插入新元素之前扩展数组的大小也是有意义的