为什么会出现数组越界错误?

时间:2018-10-02 04:16:28

标签: java

我无法弄清楚为什么我的代码不允许我从列表中删除值。我想让列表中包含10个值,然后当我想取出一个值并替换它时,我使用remove()然后使用add()。我的错误是这样的:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 
     at MyList.remove(MyList.java:36) 
     at MyListDriver.main(MyListDriver.java:17) 

这是这些部分的代码:

public class MyListDriver{
public static void main(String[] args){


MyList alpha = new MyList(9);
alpha.add("22");


alpha.add("2");
alpha.add("1");
alpha.add("22");
alpha.add("13");      
alpha.add("6");   
alpha.add("7");
alpha.add("32");
alpha.add("172");
alpha.add("2");
alpha.remove("12");
alpha.add("23");
alpha.print();
}
}

MyList中的一部分是remove(),这是我收到错误的地方。

public void remove(String data){
  int index = 0;
  for(int r = 0; r <=arr.length; r++)
  {
      if(arr[r].equals(data)){
         index=r;
         break;
      }
  }

  remove(index);
}
public void remove(int index){
      if(index>=0 && index<loc){
         for(int i=index; i<loc-1; i++){
            arr[index]=arr[index+1];
         }
         loc--;
      }
   }  

我想有一个重载的remove方法。我不知道为什么我得到一个数组超出范围错误。

谢谢您的任何帮助。

1 个答案:

答案 0 :(得分:2)

我知道你有答案

for(int r = 0; r <=arr.length; r++)
  {
      if(arr[r].equals(data)){
         index=r;
         break;
      }
  }

您为什么得到ArrayIndexOutOfBoundsException

因为当Ex = r = arr.lenght时。数组长度为3表示0 1 2

当r = 3时,由于3 <= 3,该条件重新调整为真

for(int r = 0; r < arr.length; r++)
  {
      if(arr[r].equals(data)){
         index=r;
         break;
      }
  }