我有实现这个非常接近完成的代码,导致我的 IndexOutofBounds 错误的原因似乎是在插入队列的一种情况下发生的。有任何想法吗?在我的课程开始时,我将后部和前部设置为 -1,计数为 0。数组的最大大小为 100。有一个 isfull 类可以测试计数是否为最大大小。
public boolean insert(int n){
if (isFull()){
//not inserted
return false;
}
else{
//make it the first in queue if queue is empty
if ( front == -1 && rear == -1){
front++;
rear++;
list[front] = n;
list[rear] = n;
count++;
return true;
}
//not at end of queue, add to end
else if ( (count+1) <= 100 ){
rear++;
list[rear] = n;
count++;
return true;
}
//else add to front
else{
//update rear
rear = ((count+1)%100)-1;
list[rear] = n;
return true;
}
}
}
到目前为止,此代码按以下顺序将一个数字插入到数组中:0。检查它是否已满。如果是退出。1. 如果队列为空,则将其设为其中的第一项。2.如果队列不为空或不满,检查数组后面是否没有超过最大点数。如果没有,请将其添加到末尾。3.如果队列不是空的或满的,但是队列的后面是满的。循环并将其插入数组的开头。
问题是在以下情况下: - 数组填充有数字 1-100。此时阵列已满。- 移除前面,因此阵列从 2-100 变为第一个插槽为空。- 插入刚刚删除的号码,这会导致错误。此时 count+1 没有超过最大点数,因此它尝试将其添加到后面。但是由于最后一个位置已满,它不会循环,抛出一个数组越界异常。我可以添加什么来检查最后一个位置是否已填充并在这种情况下添加到数组的开头?
我的删除方法:
public int remove(){
//if empty return -1
if (isEmpty()){
return -1;
}
else{//else remove
front++;
int x = list[front-1];
count--;
return x;
}
}