不错才怪呢。
anOrder.removeDigitalVideoDisc(dvd1);//出错!
这里是数组第一个值为null
itemsOrdered[0]=null
而另外两个分别被itemsOrdered[1],itemsOrdered[2]引用,此时个数为2
然后计算总数的时候是计算的itemsOrdered[0]和itemsOrdered[1].
因为itemsOrdered[0]为null,以下略.

解决方案 »

  1.   

    试试把 class Order 中removeDigitalVideoDisc改为下面
       public void removeDigitalVideoDisc(DigitalVideoDisc disc){
              int qty = getQtyOrdered();
              if(qty>0)
              {
                for(int i=0; i<qty; i++)
                {             
                  if(disc.equals(itemsOrdered[i]))
                  {
                    for(int j=i;j<qty;j++)                 
                      itemsOrdered[j]=itemsOrdered[j+1];    
                    break;
                  }
                }
                itemsOrdered[qty]=null;
                setQtyOrdered(qty-1);
              }
            }
      

  2.   

    对楼上的做了些小修改
    楼上的似乎无论是否相等都会做itemsOrdered[qty]=null;这句

    anOrder.removeDigitalVideoDisc(dvd2);
    anOrder.removeDigitalVideoDisc(dvd2);
    这样多次删除时会有错误.public void removeDigitalVideoDisc(DigitalVideoDisc disc){
    int qty = getQtyOrdered(); if(qty>0){
    for(int i=0; i<qty; i++){
    if(disc.equals(itemsOrdered[i])){
    for(int j=i;j<qty;j++)                 
                      itemsOrdered[j]=itemsOrdered[j+1];    
                 itemsOrdered[qty]=null;
    setQtyOrdered(qty-1);
    break;
          }
       }
    }


    }