Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用带链接列表的冒泡排序_Java_Sorting_Linked List - Fatal编程技术网

Java 使用带链接列表的冒泡排序

Java 使用带链接列表的冒泡排序,java,sorting,linked-list,Java,Sorting,Linked List,我正在尝试编写一个方法,该方法将根据每个对象的整数变量(名为优先级)对链表中的对象进行排序。我以前在ArrayList中使用过冒泡排序,并没有遇到任何问题,但出于某种原因,当我尝试使用链接列表时,它会给我一个NullPointerException,我无法找出我做错了什么。有什么建议吗 public void sortList() { boolean flag = true; Item temp = null; Item position = head; Item

我正在尝试编写一个方法,该方法将根据每个对象的整数变量(名为优先级)对链表中的对象进行排序。我以前在ArrayList中使用过冒泡排序,并没有遇到任何问题,但出于某种原因,当我尝试使用链接列表时,它会给我一个NullPointerException,我无法找出我做错了什么。有什么建议吗

public void sortList() {
    boolean flag = true;
    Item temp = null;
    Item position = head;
    Item positionLink = position.link;
    while(flag) {
        flag = false;
        while (position != null) {
            if(position.getPriority() > positionLink.getPriority()) {
                temp.setItem(position);
                position.setItem(positionLink);
                positionLink.link.setItem(temp);
                flag = true;
                position = position.getItem();
        }
        }
    }
}

您没有初始化
temp

 temp.setItem(position);

您没有初始化
temp

 temp.setItem(position);

顺便说一句,你的算法看起来是错误的。。 item.link和item.setItem()存在混乱。。等等

应该是这样的:

public void sortList() {

    boolean flag = true;
    while (flag) {
        flag = false;

        Item position = head;
        Item positionNext = position.link;
        Item positionPrev = null;

        while (positionNext != null) {
            if(position.getPriority() > positionNext.getPriority()) {

                Item temp = position;
                Item tempNextNext = positionNext.link;
                position = positionNext;
                position.link = temp;
                positionNext = temp;
                positionNext.link = tempNextNext;

                if (positionPrev == null) { // position is head
                    head = position;
                } else {
                    positionPrev.link = position;
                }

                flag = true;
            }
            positionPrev = position;
            position = position.link;
            positionNext = position.link;
        }
    }
}

顺便说一句,你的算法看起来是错误的。。 item.link和item.setItem()存在混乱。。等等

应该是这样的:

public void sortList() {

    boolean flag = true;
    while (flag) {
        flag = false;

        Item position = head;
        Item positionNext = position.link;
        Item positionPrev = null;

        while (positionNext != null) {
            if(position.getPriority() > positionNext.getPriority()) {

                Item temp = position;
                Item tempNextNext = positionNext.link;
                position = positionNext;
                position.link = temp;
                positionNext = temp;
                positionNext.link = tempNextNext;

                if (positionPrev == null) { // position is head
                    head = position;
                } else {
                    positionPrev.link = position;
                }

                flag = true;
            }
            positionPrev = position;
            position = position.link;
            positionNext = position.link;
        }
    }
}

请添加堆栈跟踪Exception@Algorithmist有这么复杂吗?:)当然,只是问问题的好方式。维塔利,如果您觉得这是一个简单的问题,请回答它,而不是留下无用的评论。请随时查看我的答案:)@user2180462始终检查异常stackTrace以了解问题的核心。如果您检查了stackTrace,那么几秒钟内您就可以解决temp=null问题。请添加的stackTraceException@Algorithmist有这么复杂吗?:)当然,只是问问题的好方式。维塔利,如果您觉得这是一个简单的问题,请回答它,而不是留下无用的评论。请随时查看我的答案:)@user2180462始终检查异常stackTrace以了解问题的核心。如果您检查了stackTrace,那么几秒钟内您就解决了temp=null问题。