2017-03-07 2 views
0

CircularArrayQueueを実装しようとしていますが、キューが実装されていないときにisEmpty()メソッドがfalseを返しています。私のエラーを指摘できますか?アレイサイズgetCapacityLeftArithmeticExceptionがスローされ、ときJava CircularArrayQueue isEmptyメソッド

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

あなたは昨日同じ質問を投稿しましたか? –

答えて

0
return (array.length - rear + front)%array.length; 

を試みます。 ゼロで割り切れるようにしないためです。

0

は、上記のコード

public int getCapacityLeft(){ 

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

} 
0

キューが初期化されると、フロントとリアの両方がゼロである。この

if(front == -1 && rear == -1) 
     return ture; 
    else 
     return false; 
+0

so ... 'return(front == -1 && rear == -1)' –

1

を試してみてくださいゼロである

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

のでgetCapacityLeft戻り(array.length + 0)%array.length

完全なバッファと空のバッファの違いをどのように管理するかを考慮して、アイテムの数を正しく計算する必要があります。どちらの場合でもrear == frontを使用しているようです。違いをどのように伝えるかを決め、バッファが空の場合はarray.lengthを返し、いっぱいの場合はゼロを返すgetCapacityLeftを記述することができます。

関連する問題