空指针出错

时间:2014-11-03 13:54:27

标签: java

    public class List {
        private class Node {
            public Node next = null;
            Object element;
            Node text;

            Node(Object element, Node prevNode) {
                this.element = element;
                prevNode = this;
            }

            Node(Object element) {
                this.element = element;
                element = null;
            }
        }

        private Node head;
        private Node tail;
        private int count;

        public List() {
            this.head = null;
            this.tail = null;
            this.count = 0;
        }

        public void add(Object item) {
            if (head == null) {
                // We have empty list
                head = new Node(item);
                tail = head;
            } else {
                // We have non-empty list
                Node newNode = new Node(item, tail);
                tail = newNode;
            }
            count++;
        }

        public Object remove(int index) {
            if (index >= count || index < 0) {
                throw new IndexOutOfBoundsException("Invalid index: " + index);
            }
            // Find the element at the specified index
            int currentIndex = 0;
            Node currentNode = head;
            Node prevNode = null;
            while (currentIndex < index) {
                prevNode = currentNode;
                currentNode = currentNode.next;
                currentIndex++;
                count--;
                if (count == 0) {
                    head = null;
                    tail = null;
                } else if (prevNode == null) {
                    head = currentNode.next;
                } else {
                    prevNode.next = currentNode.next;
                }

            }
            return currentNode.element;

        }

        public int remove(Object item) {
            // Find the element containing searched item
            int currentIndex = 0;
            Node currentNode = head;
            Node prevNode = null;
            while (currentNode != null) {
                if ((currentNode.element != null && currentNode.element
                        .equals(item))
                        || (currentNode.element == null)
                        && (item == null)) {
                    break;
                }
                prevNode = currentNode;
                currentNode = currentNode.next;
                currentIndex++;
            }
            if (currentNode != null) {
                // Element is found in the list. Remove it
                count--;
                if (count == 0) {
                    head = null;
                    tail = null;
                } else if (prevNode == null) {
                    head = currentNode.next;
                } else {
                    prevNode.next = currentNode.next;
                }
                return currentIndex;
            } else {
                // Element is not found in the list
                return -1;
            }
        }

        public int indexOf(Object item) {
            int index = 0;
            Node current = head;
            while (current != null) {
                if ((current.element != null && current.element.equals(item))
                        || (current.element == null) && (item == null)) {
                    return index;
                }
                current = current.next;
                index++;
            }
            return -1;
        }

        public boolean contains(Object item) {
            int index = indexOf(item);
            boolean found = (index != -1);
            return found;
        }

        public Object elementAt(int index) {
            if (index >= count || index < 0) {
                throw new IndexOutOfBoundsException("Invalid index: " + index);
            }
            Node currentNode = this.head;
            for (int i = 0; i < index; i++) {
                currentNode = currentNode.next;
            }
            return currentNode.element;
        }

        public int getLength() {
            return count;
        }

        public static void main(String[] args) throws NullPointerException {
            List shoppingList = new List();
            shoppingList.add("Milk");
            shoppingList.add("Honey");
            shoppingList.add("Olives");
            shoppingList.add("Beer");
            shoppingList.remove("Olives");
            System.out.println("We need to buy:");
            for (int i = 0; i < shoppingList.getLength(); i++) {
                System.out.println(shoppingList.elementAt(i));
            }
            System.out.println("Do we have to buy Bread? "
                    + shoppingList.contains("Bread"));
        }
    }

它给我在maina和索引中有nullpointer。 我的错误在哪里? 我想知道如何解决这个问题。谢谢。 如果你能给我一些代码反馈,我将非常感激。

2 个答案:

答案 0 :(得分:0)

我理解你的代码中有一些东西会在你运行程序时给你nullpointerException,但是不需要它在main方法中,main调用的任何方法都可以给出例外。不过,试试这个:

替换此行:

for (int i=0; i<shoppingList.getLength(); i++) {

这一个:

for (int i=0; i < shoppingList.length(); i++) {

如果.length()不起作用,也许.size()会这样做。

for (int i=0; i<shoppingList.size(); i++) {

如果您正在使用eclipse,netbeans或任何其他环境,请发布哪一行抛出NullPointerException。除非您向我们提供更多数据,否则我们无法为您提供帮助。

答案 1 :(得分:0)

创建节点时未设置next,因此next始终为空。

    Node(final Object element, Node prevNode) {
        this.element = element;
        prevNode = this;
    }

应该是

    Node(final Object element, Node prevNode) {
        this.element = element;
        prevNode.next = this;
    }
相关问题