java有序顺序表中按顺序插入数字 - 爱问答

(爱问答)

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 stub
sj1<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;    }


相关标签:java

下一篇:C++任意输入五个字符串,统计其中所有大于串“Christmas”的字符串个数

上一篇:写出下列程序的输出结果。

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?