gpt4 book ai didi

java - 当之前的测试在我的双链表中正常工作时,代码在节点中存储错误的数据,并给我一个 OutOfMemoryError

转载 作者:行者123 更新时间:2023-11-30 03:12:32 25 4
gpt4 key购买 nike

所以我开始完成本周的作业,并从最重要的实现方法开始,即 insertbefore() 方法。在双向链表中第 2 点的插入测试之前,此方法似乎对每个测试都很有效。之前的测试(在第 1 点插入)运行良好,并给出了预期的输出,但对于此测试,它给出了错误的输出并导致 OutOfMemoryError...

我对这是如何发生的以及为什么代码表现出意外感到非常困惑。我对 DoublyLinkedLists 方面也有点不确定,并且已经在这个程序上苦苦挣扎了很长一段时间,任何帮助都将不胜感激

下面是我的代码:

public void insertBefore( int pos, T data ) 
{
if(isEmpty()){
DLLNode current = new DLLNode(data,null,null);
head = current;
tail = current;
}
else if(pos<=0){
DLLNode current = new DLLNode(data,null,head);
head.prev = current;
current.next = head;
current.prev = null;
head = current;
}
else if(pos>=count){
DLLNode current = new DLLNode(data,tail,null);
tail.next = current;
current.prev = tail;
current.next = null;
tail = current;
}
else{
DLLNode current = new DLLNode(data,null,null);
int i=1;
DLLNode posZero = head;
while(i<count){
if(i==pos){
DLLNode tmp = head.next;
posZero.next = current;
current.prev = head;
current.next = tmp;
tmp.prev = current;
}
posZero = posZero.next;
i++;
}
}
System.out.println();
displayNodeList();
count++;
return;
}

最佳答案

看看这段代码...

    DLLNode posZero = head;
while(i<count){
if(i==pos){
DLLNode tmp = head.next;

“tmp”始终是头部的下一个元素,换句话说,是第二个元素。这样,您就可以在 toString 中创建一个无限循环,因为插入的元素指向第二个元素作为下一个,然后该元素将再次指向插入的元素,等等。

头部 -> 1. -> 2. -> 1. -> 2. -> 1. -> 2. -> 等等

这就是为什么会出现内存不足错误的原因:您的 StringBuilder 只是不断增长、增长、增长...直到没有内存剩余。对你来说幸运的是,你没有使用递归,因为这会让你得到一个 StackOverflow...好吧,可能并没有真正更好;-)

作为一个建议:如果您a)将每个测试放在单独的方法中并且b)使用某种断言框架(例如Hamcrest、AssertJ或Truth),那么您的测试将更具可读性。

关于java - 当之前的测试在我的双链表中正常工作时,代码在节点中存储错误的数据,并给我一个 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33319590/

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