gpt4 book ai didi

java - 在排序双向链表中添加方法 - java

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

我真的很努力为我的排序双向链表创建一个添加方法。我正在尝试根据可比较的顺序将对象添加到列表中。我现在的代码:

       public void add(DistanceEvent obj){

DistanceEvent newNode = obj;

if (firstLink == null)
{
firstLink = newNode;
return;
}

else if (obj.compareTo(firstLink) < 0) {
newNode.next = firstLink;
firstLink = newNode;
}

else
{DistanceEvent after = firstLink.next;
DistanceEvent before = firstLink;
while (after != null){
if (obj.compareTo(after) < 0)
break;
before = after;
after = after.next;

}

newNode.next =before.next;
before.next = newNode;

}
}
}

我试图向此列表添加 10 个对象,但是当我显示列表内容时,我只返回两个。我已经为此苦苦挣扎了一段时间,而且我对 java 很陌生,所以任何帮助将不胜感激。这是我的链表类的其余部分:

public class DoubleEndedLinkedList {
DistanceEvent firstLink;
DistanceEvent lastLink;

public void insertInFirstPosition(String name, String country, int turn){

DistanceEvent theNewLink = new DistanceEvent(name, country, turn);

if(isEmpty()){
lastLink = theNewLink;
} else {
firstLink.previous = theNewLink;
}

theNewLink.next = firstLink;
firstLink = theNewLink;

}

public void insertInLastPosition(String name, String country, int turn){

DistanceEvent theNewLink = new DistanceEvent(name, country, turn);

if(isEmpty()){

firstLink = theNewLink;

} else {


lastLink.next = theNewLink;
theNewLink.previous = lastLink;

}

lastLink = theNewLink;


}

public boolean isEmpty(){
return(firstLink == null); }

public void display() {
DistanceEvent theLink = firstLink;
while(theLink != null){
theLink.display();
theLink = theLink.next;
System.out.println();
}
}

public boolean insertAfterKey(String name, String country, int turn, int key){
DistanceEvent theNewLink = new DistanceEvent(name, country, turn);
DistanceEvent currentDistanceEvent = firstLink;
while (currentDistanceEvent.turn != key){
currentDistanceEvent = currentDistanceEvent.next;
if(currentDistanceEvent == null){
return false;
}

}
if(currentDistanceEvent == lastLink){
theNewLink.next = null;
lastLink = theNewLink;
} else {
theNewLink.next = currentDistanceEvent.next;
currentDistanceEvent.next.previous = theNewLink;


}

theNewLink.previous = currentDistanceEvent;
currentDistanceEvent.next = theNewLink;
return true;
}
public void add(DistanceEvent obj){

DistanceEvent newNode = obj;

if (firstLink == null)
{
firstLink = newNode;
return;
}

else if (obj.compareTo(firstLink) < 0) {
newNode.next = firstLink;
firstLink = newNode;
}

else
{DistanceEvent after = firstLink.next;
DistanceEvent before = firstLink;
while (after != null){
if (obj.compareTo(after) < 0)
break;
before = after;
after = after.next;

}

newNode.next =before.next;
before.next = newNode;

}
}
}

对于我的代码的可读性,我深表歉意。感谢您的宝贵时间!

最佳答案

I have been struggling with this for a while and I'm very new to java so any help would be appreciated.

好吧,我确信有人可以为您找到代码中的一个或多个错误。但我认为(从长远来看)鼓励您提高调试技能会对您更有帮助。

这里有一些建议:

  • 阅读 IDE 的教程 Material ,了解如何使用其调试器。了解如何设置断点、单步执行、查看变量值、查看对象内部等等。

  • 尝试在代码中精心选择的位置添加一些“跟踪打印”语句,以了解其正在执行的操作。

  • 学习阅读自己的代码并可视化它正在做什么。对初学者有用的一种技术是“手动执行”代码。拿一张纸、一支铅笔和一 block 橡皮,写下所有变量,然后将对象绘制为方框,其中的单元格包含文字值以及对绘制为箭头的其他对象的引用。然后通过一次一条语句单步执行代码来“执行”程序,更新变量和字段。

    经过一些练习,您将能够在脑海中完成这一切...

<小时/>

我只触及了这个主题的表面,但是如果您在 Google 上搜索“如何调试 java”,就会发现很多好的资源:教程、视频等等。

<小时/>

最后,一些提示:

  • 要有条理。理解代码的实际含义。看看你拥有的证据。

  • 不要依赖“直觉”。如果您对正在发生的事情做出没有证据支持的假设,那么很容易浪费时间寻找幻象。

  • 假设 99% 的情况下,错误都存在于的代码中。如果您只使用标准 Java 类库,则可以达到 99.99%。

  • 调试多线程程序很难......

关于java - 在排序双向链表中添加方法 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29093478/

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