class PriorityQ
{
private int maxSize;
private long queArray[];
private int nItems;

public PriorityQ(int s)
{
maxSize=s;
queArray=new long[maxSize];
nItems=0;
}

public void insert(long item)
{
int j;
if(nItems==0)
{
queArray[nItems++]=item;
}
else
{
for(j=nItems-1;j>=0;j--)
{
if(item>queArray[j])
{
queArray[j+1]=queArray[j];
}

    else
    {
     break;
    }
queArray[j+1]=item;
nItems++;
     }
}
}

public long remove()
{
return queArray[--nItems];
}

public long peekMin()
{
return queArray[nItems-1];
}

public boolean isEmpty()
{
return (nItems==0);
}

public boolean isFull()
{
return (nItems==maxSize);
}
}class PriorityQApp
{
public static void main(String args[]) 
{
PriorityQ thePQ=new PriorityQ(5);

thePQ.insert(30);
thePQ.insert(50);
thePQ.insert(10);
thePQ.insert(40);
thePQ.insert(20);

while (!thePQ.isEmpty())
{
long item=thePQ.remove();
System.out.print(item+" ");
}
System.out.print(" ");
}
}
这个程序应该输出的是“10 20 30 40 50”,为什么输出的是“50 30”啊?
不知道错在哪了,望各位指点下!

解决方案 »

  1.   

    for(j=nItems-1;j>=0;j--)
    {
    if(item>queArray[j])
    {
    queArray[j+1]=queArray[j];
    }

        else
        {
         break;
        }
    你这段代码中,你应该用continue,而不是break;break是推出循环的,所以插入50后后面的数没有被插入,结果只插入30和50
      

  2.   

    queArray[j+1]=queArray[j];//这句话是不是可以写成j--?
      

  3.   

    我上面答错了,下面的我试过了
    public void insert(long item)
    {

    if(nItems==0)
    {
    queArray[nItems]=item;
    nItems++;
    }
    else 
    { if(item<queArray[nItems-1])
    {queArray[nItems]=item;
    nItems++;
    }


    else
    {for(int j=0;j<nItems;j++)
    { if(item>queArray[j])
    {
    for(int k=nItems-1;k>=j;k--)
      {queArray[k+1]=queArray[k];
      } 
      queArray[j]=item;
      break;
    }
     
         }
         nItems++;
    }

        }
    }