不错才怪呢。
anOrder.removeDigitalVideoDisc(dvd1);//出错!
这里是数组第一个值为null
itemsOrdered[0]=null
而另外两个分别被itemsOrdered[1],itemsOrdered[2]引用,此时个数为2
然后计算总数的时候是计算的itemsOrdered[0]和itemsOrdered[1].
因为itemsOrdered[0]为null,以下略.
anOrder.removeDigitalVideoDisc(dvd1);//出错!
这里是数组第一个值为null
itemsOrdered[0]=null
而另外两个分别被itemsOrdered[1],itemsOrdered[2]引用,此时个数为2
然后计算总数的时候是计算的itemsOrdered[0]和itemsOrdered[1].
因为itemsOrdered[0]为null,以下略.
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);
}
}
楼上的似乎无论是否相等都会做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;
}
}
}
}