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
答案 0 :(得分:3)
for(int k =i;k<l;k++)
arr.set(k,arr.get(k+1));
当k = l - 1 = 10 - 1 = 9
,k+1 = 10
时,arr.get(k+1)
超出范围。
两段代码之间的主要区别在于,在第一段中,您将数组的大小初始化为10:
SearchDeletion2 arr = new SearchDeletion2(10);
在第二步中,您将其初始化为100:
arr = new LowArray1(100);
因此,在第二段代码中,索引10
有效,而在第一段代码中则不是。