我正在尝试在双端队列上实现环绕,并且由于某种原因,我的insertRight()和removeRight()方法输出错误,而我的removeLeft()方法只是抛出错误。我环顾四周,似乎无法找到为什么我的方法在这里不起作用的答案:
public void insertRight(int newItem) {
if (isFull() == true) {
System.out.print("Full");
} // end of if
else {
if (right == capacity) {
right = 0;
} // end of nested if
else {
deque[right] = newItem;
nElems++;
right++;
} // end of nested else
} // end of else
}// end of insertRight
public void removeRight() {
if (isEmpty() == true) {
System.out.println("Empty");
} // end of if
if (isEmpty() == false) {
System.out.println(right);
if (right == capacity) {
right = 0;
} // end of nested if
int temp = deque[right];
right++;
nElems--;
} // end of if
}// end of removeRight
public void removeLeft() {
if (isEmpty() == true) {
System.out.println("Empty");
} // end of if
if (isEmpty() == false) {
if (left == capacity) {
left = -1;
} // end of nested if
else {
System.out.println(left);
int temp = deque[left];
left++;
nElems--;
} // end of else
} // end of if
}// end of removeLeft
最佳答案
有关left
和right
的实际含义/值的更多信息会有所帮助。
乍一看,removeLeft()
似乎失败了,因为如果到目前为止我对您的代码的理解是正确的,那么left
的环绕点将为0,而不是capacity
。
另外,negative array indices do not work in java。您将要直接引用实际的最后一个索引。
我真的建议您研究一下代码格式。您的缩进使得很难分辨一个块在哪里结束而新的块在哪里开始。您可以通过遵循一致的缩进模式来保存自己的显式注释:
public void insertRight(int newItem) {
if (isFull()) {
System.out.print("Full");
} else {
if (right == capacity) {
right = 0;
} else {
deque[right] = newItem;
nElems++;
right++;
}
}
}
public void removeRight() {
if (isEmpty()) {
System.out.println("Empty");
} else {
System.out.println(right);
if (right == capacity) {
right = 0;
}
int temp = deque[right];
right++;
nElems--;
}
}
public void removeLeft() {
if (isEmpty()) {
System.out.println("Empty");
} else {
// My assumption inserted here:
if (left == 0) {
left = capacity - 1;
} else {
System.out.println(left);
int temp = deque[left];
left++;
nElems--;
}
}
}