gpt4 book ai didi

java - 循环队列数组插入案例

转载 作者:行者123 更新时间:2023-11-29 08:57:12 25 4
gpt4 key购买 nike

我有实现这个非常接近完成的代码,导致我的 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 没有超过 max spots,所以它尝试将它添加到后面。但是由于最后一个点满了,所以不会循环,抛出数组越界异常。我可以添加什么来检查最后一个位置是否已填充并在这种情况下添加到数组的开头?

我的删除方法:

    public int remove(){
//if empty return -1
if (isEmpty()){
return -1;
}
else{//else remove
front++;
int x = list[front-1];
count--;
return x;
}
}

最佳答案

public boolean insert(int n){

if (isFull()){
//not inserted
return false;
}
else{

//make it the first in queue if queue is empty
if (isEmpty()){ //use empty
front=0;//just set it
rear=0;//just set it
}
list[rear] = n;
rear = (rear+1)%100; //just rewind it when it reaches 100 index 0 must be free at this point

count++;
return true;
}

}

我想 count 是元素的数量,所以 remove 应该做 count--。在这种情况下,计数总是 <100,因为在您检查之后数组未满...所以您唯一要做的就是倒回后计数器;

另外删除应该做 front = (front+1)%100;

public int remove(){
if (isEmpty()){
return -1;
}
else{//else remove

int x = list[front];//reorder
front = (front+1)%100;//rewind
count--;
return x;
}
}

empty()full() 应该使用 count

front 指向 remove() next

的元素

last 总是指向下一个空闲点(或者 front 也是下一个空闲点)

关于java - 循环队列数组插入案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19578011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com