2017-03-07 34 views
0

我想實現一個CircularArrayQueue和我的方法的isEmpty()的返回false。你能指出我的錯誤嗎?的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; 

上面的代碼中,當陣列大小是,getCapacityLeft將拋出ArithmeticException。爲不能除以

0

嘗試

public int getCapacityLeft(){ 

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

} 
0

嘗試這種

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

所以...'收益率(前== -1 &&後== -1)' –

1

當隊列被初始化,前部和後部都爲零。

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

所以getCapacityLeft回報(array.length + 0)%array.length它是一個零。

您需要正確計算項目的數量,同時考慮到如何管理一個完整的緩衝和空緩衝區之間的區別 - 它似乎在這兩種情況下使用的是後==前。決定你將如何分辨出來,然後你可以寫一個getCapacityLeft如果緩衝區是空的,零,如果是滿返回array.length。