2 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
你在多個(gè)地方:
back = (back - 1) % size;
這并不像您認(rèn)為的那樣在back
最初的時(shí)候起作用0
,它變成了-1 % size
,通常是-1
. 在它出現(xiàn)的地方,你應(yīng)該使用:
back = (size + back - 1) % size;

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
我注意到的第一件事是您為這個(gè)問(wèn)題使用了太多變量。如果將其分解,則只需要 3 個(gè)變量。陣列、陣列的大小和陣列中用于注入和彈出的當(dāng)前位置。這是一個(gè) LiFo(后進(jìn)先出)訂單。
public void inject(int x){
if (this.deque.size() == this.size){ //check for full array
System.out.println("The Deque is Full");
} else {
this.deque[this.back+1] = x; //input new item next slot
this.back ++; //increment back to new input where eject would pull from
}
}
public class Deque {
int[] deque;
int back;
int size;
public Deque(int s){
this.size = s;
this.deque = new int[size];
this.back = 0;
}
這也應(yīng)該解決你的數(shù)組索引問(wèn)題我不知道你為什么使用模函數(shù)'%'作為back的當(dāng)前位置。
添加回答
舉報(bào)