我编写了一个排队程序,允许用户将学生对象输入队列。以下是我遇到问题的代码部分:
private void resize(int max) {
assert max >= numOfNodes;
StudentListing[] temp = (StudentListing[]) new Object[max];
for (int i = 0; i < numOfNodes; i++) {
temp[i] = data[(front + i) % data.length];
}
data = temp;
front = 0;
rear = numOfNodes;
}
public void enqueue(StudentListing newNode) {
if (numOfNodes == data.length) {
resize(data.length * 2);
}
data[rear++] = newNode;
if (rear == data.length) {
rear = 0;
}
numOfNodes++;
}
我遇到的问题是,当我将新学生添加到队列中并且已满时,它会执行resize方法并使用新学生条目覆盖我之前的所有条目。
例如:名为John的学生被添加到队列中,最大大小为1.用户将另一个名为Tom的学生添加到队列中;它扩展了队列,但随后覆盖了John。最终结果是队列中有两个Tom而不是一个John和一个Tom。
我需要帮助找出如何阻止它覆盖,而是将所有先前的条目添加到新创建的扩展队列中,然后将新条目添加到所述队列的末尾。提前谢谢你:)