gpt4 book ai didi

java - 为通用队列类创建 toString() 方法时出现逻辑错误

转载 作者:行者123 更新时间:2023-12-02 06:03:29 25 4
gpt4 key购买 nike

我正在尝试为使用 ArrayList 的通用队列创建一个 toString() 方法。我在使用 StringBuilder 来生成 toString() 方法返回的字符串的 for 循环中遇到了一些麻烦。

当我尝试使用 toString() 打印这些对象之一时,我在线程“main”java.lang.ArrayIndexOutOfBoundsException: -1 中收到异常:-1。我认为问题出在 T element = q.get(front - k); 线上,但我不太确定。

(front 变量引用队列的前面,即下一个要出队的数字)。

public String toString() {

//Create new StringBuilder
StringBuilder sBuilder = new StringBuilder();

//If q is empty, return so
if(isEmpty())
sBuilder.append("The queue is currently empty" + "\n");

//else make the string
else {

sBuilder.append("The next item to get removed is " + front + ";\n");

//for loop to create the rest of the list
for (int k = 0; k < getSize(); k++) {

//Set the element num, and find the element.
int elementNum = k + 1;
T element = q.get(front - k);

//Print that element
sBuilder.append("Element " + elementNum + " is " + element + ";\n");
}
}

//return StringBuilder
return sBuilder.toString();
}

这是入队的方法

公共(public)无效入队(T t){

    //Add to queue
size++;
q.add(rear, t);
rear++;

}

这是出队的方法

公共(public) T 出队() {

    //Minus Size
size--;

//Set the value to value
T value = q.get(front);

//set front equal to null for garbage collection
q.set(front, null);

//Update front
front++;

//return value
return value;

}

我还有一个 int getSize() 方法和一个 isEmpty() 方法。

最佳答案

好吧,我确实需要查看完整的实现才能确定,但​​这就是我认为它的工作原理。您的前部和后部可能都从零开始,当您添加元素时,您会增加后部,因此队列中后面的元素具有更高的索引。

假设我们从一个空队列开始并添加 3 个元素。 Front 为 0,rear 为 3,size 为 3。(PS:你不需要使用 size 变量,你可以只使用后减去前)。因此,当您执行 q.get(front-k) 时,您将尝试获取索引 0(到目前为止还可以)、-1 和 -2(这就是您收到错误的地方)处的元素。您需要执行 q.get(front+k) 或 q.get(rear-k),具体取决于您希望打印元素的顺序。

关于java - 为通用队列类创建 toString() 方法时出现逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959314/

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