Java CircularArrayQueue - bo'sh usul

Agar CircularArrayQueue dasturini bajarishga harakat qilaman va menejeni isEmpty() navbat to'ldirilganda noto'g'ri bo'lib qaytadi. Xatamga ishora qila olasizmi?

public CircularArrayQueue(int size)
{
    array = new Integer[size];
    front = rear = 0;
}

... code omitted 

// returns the number of elements in the queue
@Override
public int noItems() 
{   
    return array.length - getCapacityLeft();
}

// returns true if the queue is empty
@Override
public boolean isEmpty()
{
    return noItems() == 0;
}

//returns the number of available spots in the queue before a resize needs to be done
public int getCapacityLeft()
{
    return (array.length - rear + front)%array.length;
}   
0
Kecha bir xil savol yozganmisiz?
qo'shib qo'ydi muallif Vijayan Kani, manba
Kecha bir xil savol yozganmisiz?
qo'shib qo'ydi muallif Vijayan Kani, manba

8 javoblar

Navbati boshlanganda old va orqa nolga teng.

public int getCapacityLeft()
{
    return (array.length - rear + front)%array.length;
} 

Shunday qilib getCapacityLeft nol bo'lgan (array.length + 0)% array.length funksiyasini qaytaradi.

To'liq tampon va bo'sh tampon o'rtasidagi farqni qanday boshqarayotganingizni hisobga olib, elementlarning sonini to'g'ri hisoblashingiz kerak. Ikkala holatda ham oldingi == old tomondan foydalanasiz. Farqni qanday ayta olasiz va keyin array.length qiymatini qaytaradigan getCapacityLeft yozishingiz mumkin, agar bufer bo'sh bo'lsa va to'liq bo'lsa nol bo'lsa.

1
qo'shib qo'ydi

Navbati boshlanganda old va orqa nolga teng.

public int getCapacityLeft()
{
    return (array.length - rear + front)%array.length;
} 

Shunday qilib getCapacityLeft nol bo'lgan (array.length + 0)% array.length funksiyasini qaytaradi.

To'liq tampon va bo'sh tampon o'rtasidagi farqni qanday boshqarayotganingizni hisobga olib, elementlarning sonini to'g'ri hisoblashingiz kerak. Ikkala holatda ham oldingi == old tomondan foydalanasiz. Farqni qanday ayta olasiz va keyin array.length qiymatini qaytaradigan getCapacityLeft yozishingiz mumkin, agar bufer bo'sh bo'lsa va to'liq bo'lsa nol bo'lsa.

1
qo'shib qo'ydi
return (array.length - rear + front)%array.length;

Yuqoridagi kod hajmi 0 bo'lsa, getCapacityLeft ArithmeticException ni tashlaydi. nol ga bo'linishni faollashtirish uchun emas.

0
qo'shib qo'ydi
return (array.length - rear + front)%array.length;

Yuqoridagi kod hajmi 0 bo'lsa, getCapacityLeft ArithmeticException ni tashlaydi. nol ga bo'linishni faollashtirish uchun emas.

0
qo'shib qo'ydi

buni sinab ko'ring

    if(front == -1 && rear == -1)
         return ture;
    else
         return false;
0
qo'shib qo'ydi
shuning uchun ... Return (oldingi == -1 && rear == -1)
qo'shib qo'ydi muallif Unamata Sanatarai, manba

buni sinab ko'ring

    if(front == -1 && rear == -1)
         return ture;
    else
         return false;
0
qo'shib qo'ydi
shuning uchun ... Return (oldingi == -1 && rear == -1)
qo'shib qo'ydi muallif Unamata Sanatarai, manba

harakat qilib ko'ring

public int getCapacityLeft(){

return array.length - Math.abs(front - rear) + 1;

}
0
qo'shib qo'ydi

harakat qilib ko'ring

public int getCapacityLeft(){

return array.length - Math.abs(front - rear) + 1;

}
0
qo'shib qo'ydi