请教高手帮忙看看程序输出有问题
[free]public class TestBubbleSort {public static void main(String[] args) {
BubbleArray ab = new BubbleArray(10);
ab.add(20);
ab.add(10);
ab.add(33);
ab.add(44);
ab.add(99);
ab.add(24);
ab.add(11);
ab.add(55);
ab.add(88);
ab.add(22);
ab.display();
ab.insertSort();
ab.display();
ab.delete(10);
ab.display();
}
}
class BubbleArray {
private long[] a;
private int nElems;
BubbleArray(int max){
a = new long[max];
nElems = 0;
}
public void add(long value) {
a[nElems] = value;
nElems ++;
}
public boolean find(long value) {
int i;
for(i = 0; i < nElems; i++) {
if(a[i] == value) {
break;
}
}
if(i == nElems) {
return false;
} else {
return true;
}
}
public void delete(long value){
if(nElems == 0) {
System.out.println("数组中已经没有元素了!");
} else {
for(int i = 0; i < nElems; i++) {
if(a[i] == value) {
for(int j = i; j < nElems; j++) {
a[j] = a[j+1];
}
}
nElems--;
}
}
}
/*//泡沫排序法
public void bubbleSort() {
long temp = 0;
for(int i = nElems - 1; i > 1; i--) { //排序的趟数
for(int j = 0; j < i; j++){ //j<i:i后面的数已经排好序了,不需再比较
if(a[j] > a[j +1]) {
swap(j, j + 1);
}
}
}
}
*/ //交换算法
public void swap(int x, int y){
long temp = a[x];
a[x] = a[y];
a[y] = temp;
}
/* //选择排序法
public void selectionSort(){
for(int i = 0; i < nElems - 1; i++) {
int min = i;
for(int j = min + 1; j < nElems; j++) {
if(a[j] < a[min]) {
min = j; //交换下标
}
}
swap(min, i);
}
}
*/
//插入排序
public void insertSort() {
long temp;
for(int i = 1; i < nElems; i++) {
temp = a[i];
int j = i;
while(j > 0 && a[j - 1] >= temp) {
a[j] = a[j - 1];
--j;
}
a[j] = temp;
}
}
public void display() {
for(int i = 0; i < nElems; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
}
}[/free]
输出异常:
当ab.delete(10)时
20 10 33 44 99 24 11 55 88 22
10 11 20 22 24 33 44 55 88 99
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at BubbleArray.delete(TestBubbleSort.java:59)
at TestBubbleSort.main(TestBubbleSort.java:18)
当ab.delete(除10之外的数)时 比如ab.delete(11)时输出为:
20 10 33 44 99 24 11 55 88 22
10 11 20 22 24 33 44 55 88 99
10 20 22 24 33 ( 其他数也只显示五个)
请教高手:为什么会出现以上两种情况呢,是不是delete() 方法不对呀,麻烦高手帮帮忙,不甚感激!!!
[[it] 本帖最后由 零下零度 于 2009-8-5 19:38 编辑 [/it]]