从数组中删除元素时数组超出绑定异常

时间:2014-09-07 13:10:33

标签: java arrays

import java.util.Scanner;

public class SearchDeletion2 {
private int a[] ;
SearchDeletion2(int size){
 a =new int[size];
}
public void set(int index,int elem){
    a[index]=elem;
}
public int get(int index){
    return a[index];
}
public static void main(String[] args) {
    SearchDeletion2 arr = new SearchDeletion2(10);
    arr.set(0,33);
    arr.set(1,22);
    arr.set(2,11);
    arr.set(3,99);
    arr.set(4,66);
    arr.set(5,44);
    arr.set(6,77);
    arr.set(7,88);
    arr.set(8,55);
    arr.set(9,112);
    int i;
    int l=10;
    Scanner sc = new Scanner(System.in);
    int r = sc.nextInt();
    for(i=0;i<l;i++)
        if(arr.get(i)==r)
            break;
    System.out.println(i);
    for(int k =i;k<l;k++)

        arr.set(k,arr.get(k+1));

         l--;
         System.out.println(l);
        for (int o=0;o<l;o++) 
             System.out.println(arr.get(o));


        }
}

在运行这个程序的时候我得到了脱离债券异常的数组,试了很多找出原因但不能。 112 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:10     在SearchDeletion2.get(SearchDeletion2.java:12)     在SearchDeletion2.main(SearchDeletion2.java:36) 9

但是我的书下面的同一个程序运行正常。我无法获得差异

class LowArray1
{
private long[] a; // ref to array a
//--------------------------------------------------------------
public LowArray1(int size) // constructor
{ a = new long[size]; } // create array
//--------------------------------------------------------------
public void setElem(int index, long value) // set value
{ a[index] = value; }
//--------------------------------------------------------------
public long getElem(int index) // get value
{ return a[index]; }
//--------------------------------------------------------------
} // end class LowArray
////////////////////////////////////////////////////////////////
class LowArrayApp1
{
public static void main(String[] args)
{
LowArray1 arr; // reference
arr = new LowArray1(100); // create LowArray object
int nElems = 0; // number of items in array
int j; // loop variable
arr.setElem(0, 77); // insert 10 items
arr.setElem(1, 99);
arr.setElem(2, 44);
arr.setElem(3, 55);
arr.setElem(4, 22);
arr.setElem(5, 88);
arr.setElem(6, 11);
arr.setElem(7, 00);
arr.setElem(8, 66);
arr.setElem(9, 33);
nElems = 10; // now 10 items in array
for(j=0; j<nElems; j++) // display items
System.out.print(arr.getElem(j) + " ");
System.out.println("");
int searchKey = 26; // search for data item
for(j=0; j<nElems; j++) // for each element,
if(arr.getElem(j) == searchKey) // found item?
break;
if(j == nElems) // no
System.out.println("Can’t find" + searchKey);
else // yes
System.out.println("Found " + searchKey);
//delete value 55
for(j=0; j<nElems; j++) // look for it
if(arr.getElem(j) == 55)
break;
for(int k=j; k<nElems; k++) // higher ones down
    arr.setElem(k, arr.getElem(k+1) );
    nElems--; // decrement size
    for(j=0; j<nElems; j++) // display items
    System.out.print( arr.getElem(j) +" ");
    System.out.println(" ");
    } // end main()
    } // end class LowArrayApp

1 个答案:

答案 0 :(得分:3)

for(int k =i;k<l;k++)

    arr.set(k,arr.get(k+1));

k = l - 1 = 10 - 1 = 9k+1 = 10时,arr.get(k+1)超出范围。

两段代码之间的主要区别在于,在第一段中,您将数组的大小初始化为10:

SearchDeletion2 arr = new SearchDeletion2(10);

在第二步中,您将其初始化为100:

arr = new LowArray1(100);

因此,在第二段代码中,索引10有效,而在第一段代码中则不是。