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

时间:2015-03-17 07:27:42

标签: java sorting

我真的很难为我的已排序的双向链表创建一个add方法。我试图基于可比较的顺序将对象添加到列表中。我的代码目前:

       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很新,所以任何帮助都会受到赞赏。 这是我的Linkedlist类的其余部分:

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;

       }
   }
  }

我为我的代码的可读性道歉。 谢谢你的时间!

1 个答案:

答案 0 :(得分:2)

  

我一直在努力解决这个问题,而且我对java很新,所以任何帮助都会受到赞赏。

好吧,我确信有人可以为您找到代码中的错误或错误。但是我觉得(从长远来看)鼓励你提高调试技巧会更有帮助。

以下是一些建议:

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

  • 尝试在精心挑选的地方为您的代码添加一些“跟踪打印”语句,以便了解它正在做什么。

  • 学习阅读自己的代码并想象它正在做什么。一种对初学者有用的技术是“手动执行”代码。获取一张纸铅笔和橡皮擦,写出所有变量,并将对象绘制为包含文字值的单元格和对箭头绘制的其他对象的引用。然后通过逐步执行代码一个语句来“执行”程序,更新变量和字段。

    经过一些练习,你可以在脑海中完成这一切......


我只是触及了这个主题的表面,但如果你谷歌“如何调试java”,那么有很多很好的资源:教程,视频等。


最后,有几个提示:

  • 有条不紊。理解代码实际说的内容。看看你的证据。

  • 不要依赖“预感”。如果您假设发生的事情不是以证据为基础的话,那么很容易浪费时间寻找幽灵。

  • 假设有99%的时间,错误将出现在您的代码中。如果您只使用标准的Java类库,请将其设为99.99%。

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