public class OrdArray {
private long[] a;
private int maxSize;
private int size; public void insert1(long value) {
if (size >= maxSize)
System.out.println("Array Full.");
else if (size == 0) {
a[0] = value;
size++;
} else if (value > a[size - 1]) {
a[size] = value;
size++;
} else {
for (int i = 0; i < size; i++) {
if (value < a[i]) {
for (int j = size; j > i; j--)
a[j] = a[j - 1];
a[i] = value;
size++;
break;
}
}
}
} public void insert2(long value) {
if (size >= maxSize)
System.out.println("Array Full.");
} else if (size == 0) {
a[0] = value;
size++;
} else if (value > a[size - 1]) {
a[size] = value;
size++;
} else {
for (int i = size - 1; i >= 0; i--) {
if (value <= a[i]) {
a[i + 1] = a[i];
} else {
a[i + 1] = value;
size++;
break;
}
}
}
} public static void main(String[] args) {
OrdArray a = new OrdArray(100);
for (int i = 0; i < 10; i++)
a.insert2((int) (Math.random() * 100));
System.out.println(a);
}第二个插入算法insert2出来的结果总是很奇怪,请问到底错在什么地方呢?

解决方案 »

  1.   

    import java.util.Arrays;public class OrdArray {
        private long[] a;
        private int maxSize;
        private int size;    public void insert2(long value) {
            if (size >= maxSize){
                System.out.println("Array Full.");
            } else if (size == 0) {
                a[0] = value;
                size++;
            } else if (value > a[size - 1]) {
                a[size] = value;
                size++;
            } else {
                for (int i = size - 1; i >= 0; i--) {
                    if (value <= a[i]) {
                        a[i + 1] = a[i];
                    } else {
                        a[i + 1] = value;
                        size++;
                        return;
                    }
                }
                a[0]=value;
                size++;
            }
        }
        public OrdArray(int i){
         this.maxSize=i;
         a=new long[maxSize];
        }
        public static void main(String[] args) {
            OrdArray a = new OrdArray(10);
            for (int i = 0; i < 10; i++){
                a.insert2((long) (Math.random() * 100));
            }
            
            System.out.println(Arrays.toString(a.a));
        }
    }
    测试结果:[2, 5, 36, 47, 61, 70, 78, 87, 98, 99]
    给你改了一下你的程序,其他的错误就说了(你的程序没有带参的构造,还有少了两个括号),
    主要是最后的那个else错了,没有判断数组中所有元素都比要插入的元素大的这种情况
      

  2.   

    OrdArray a = new OrdArray(100);
    ?
    你的构造器呢?