java有序顺序表中按顺序插入数字
运行结果为3 5 7 8 9,总是没有1,如果我想插入10程序就会出错,希望大佬能指导一哈!public class sj1<T> {final int Size=10;private T[] Array;private int length;@SuppressWarnings("unchecked")public sj1() {length=0;Array=(T[])new Object[Size];System.out.println("初始化成功!");} public boolean add(T obj,int pos) {if(pos<1 || pos>length+1) {System.out.println("pos值不合法");return false;}if(length==Array.length) {@SuppressWarnings("unchecked")T[] p=(T[]) new Object[length*2];for(int i=0;i<length;i++)p[i]=Array[i];Array=p;} for(int i=length;i>=pos;i--) Array[i]=Array[i-1]; Array[pos-1]=obj;length++;return true; } @SuppressWarnings("unchecked")public boolean cha(T obj) {if(length==Array.length) {T[] p=(T[]) new Object[length*2];for(int i=0;i<length;i++)p[i]=Array[i];Array=p;} int i,j,n;for(i=1,j=0;i<Array.length;i++,j++){if( (int)obj < (int)Array[i]) {Array[j+1]=Array[i];Array[j++]=obj;break;} Array[j]=Array[i];}for( n=i+1,j=j+1;n<Array.length;n++,j++) Array[j]=Array[n];return true;} public void nextOrder() {for(int i=0;i<length;i++)System.out.println(Array[i]);}public static void main(String[] args) {// TODO Auto-generated method stubsj1<Integer> va=new sj1<Integer>(); int arr[]= {1,3,5,7,9};for(int i=0;i<arr.length;i++)va.add(arr[i],i+1);System.out.println("插入前的顺序为:");va.nextOrder();System.out.println("插入是否成功:"+va.cha(8));System.out.println("插入后的顺序为:");va.nextOrder(); }
你的插入算法有问题的,以下是我改写的,经测试没有问题了
public boolean cha(T obj) { if(length==Array.length) { T[] p=(T[]) new Object[length*2]; for(int i=0; i<length; i++) p[i]=Array[i]; Array=p; } int i,j; for(i = 0; i < length; i++) { if((int)Array[i] >= (int)obj) //找到插入位置 { for(j = length; j > i; j--) //当前开始数据右移一个 Array[j] = Array[j - 1]; Array[i] = obj; //插入 break; } } if((int)obj > (int)Array[length-1]) Array[length] = obj; //插入到最后 length++; return true; }