Java总是出现nullpointerexception,求大神解答为啥和修改

nn970510 2016-10-12 07:58:12
自己写的一个代码块,错误在 if (curr.next==null),讲真我就是为了避免curr.next为null才写这个if的。。。
public void remove(E data) {
Node<E> temp=new Node<E> (data);

if (head != null){
if (data.compareTo(head.data) == 0){
head = head.next;
}
}
head = remove(head, temp);

if (head == null){
return;
}

return;

}

private Node<E> remove(Node<E> curr, Node<E> node){
if (curr.next==null){
return null;
}
if (node.data.compareTo(curr.next.data)==0){
curr.next = curr.next.next;
return curr;
}

curr.next = remove(curr.next, node);
return curr.next;
}
...全文
280 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
逗泥丸的平方 2016-10-12
  • 打赏
  • 举报
回复
       if (head != null){
             if (data.compareTo(head.data) == 0){
                head = head.next;
             }
          }
这里有问题, next 是什么~
nn970510 2016-10-12
  • 打赏
  • 举报
回复
引用 7 楼 YidingHe 的回复:
楼主要学会贴代码
public class Demo {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("no args.");
        }
    }
}
像楼主的代码层级多,又没有排版,没法看。
这个怎么贴求教
___d 2016-10-12
  • 打赏
  • 举报
回复
要不是curr为null,就是见鬼了
  • 打赏
  • 举报
回复
如果每次都是在这个地方if (curr.next==null),你就有考虑一下是否curr为空了
kahnyy5202015 2016-10-12
  • 打赏
  • 举报
回复
先打个断点 或者 输出 curr 是否为null。
skgary 2016-10-12
  • 打赏
  • 举报
回复
curr本身为null
捏造的信仰 2016-10-12
  • 打赏
  • 举报
回复
楼主要学会贴代码
public class Demo {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("no args.");
        }
    }
}
像楼主的代码层级多,又没有排版,没法看。
nn970510 2016-10-12
  • 打赏
  • 举报
回复
谢谢大家的帮助,问题的确是curr为null的情况。不过我解决这个之后又出现了新问题,为啥output是这样的: insert 5: 5 8: 5 8 7: 5 7 8 3: 3 5 7 8 4: 3 4 5 7 8 4: 3 4 4 5 7 8 4: 3 4 4 4 5 7 8 6: 3 4 4 4 5 6 7 8 8: 3 4 4 4 5 6 7 8 8 8: 3 4 4 4 5 6 7 8 8 8 remove 9: 3: 7: 3: 2: 4: 2: 2: 6: 9: 这是代码: import java.util.Iterator; import java.util.Random; public class Mainmm { public static void main(String[] args) { Random rand = new Random(1); SortedList<Integer> list = new SortedList<Integer>(); int m = args.length == 1 ? Integer.parseInt(args[0]) : 10; System.out.println("insert"); for (int i = 0; i < m; ++i) { int n = rand.nextInt(m); list.insert(n); System.out.print(n + ": "); for (Integer j : list) { System.out.print(j + " "); } System.out.println(); } // rand = new Random(1); System.out.println("remove"); for (int i = 0; i < m; ++i) { int n = rand.nextInt(m); list.remove(n); System.out.print(n + ": "); for (Integer j : list) { System.out.print(j + " "); } System.out.println(); } } } abstract class List<E> implements Iterable<E> { protected class Node<T> { protected Node(T data) { this.data = data; } protected T data; protected Node<T> next; } public abstract void insert(E data); public abstract void remove(E data); public abstract E retrieve(int index); public abstract boolean search(E data); protected Node<E> head; } class SortedList<E extends Comparable<? super E>> extends List<E> { public void insert(E data){ Node<E> temp = new Node <E> (data); head=insert (head, temp); return; } private Node<E> insert (Node<E> curr, Node <E> node){ if (curr==null || node.data.compareTo(curr.data)<0){ node.next = curr; return node; } curr.next = insert(curr.next, node); return curr; } 如果我希望output这样应该怎么改: insert 5: 5 8: 5 8 7: 5 7 8 3: 3 5 7 8 4: 3 4 5 7 8 4: 3 4 4 5 7 8 4: 3 4 4 4 5 7 8 6: 3 4 4 4 5 6 7 8 8: 3 4 4 4 5 6 7 8 8 8: 3 4 4 4 5 6 7 8 8 8 remove 9: 3 4 4 4 5 6 7 8 8 8 3: 4 4 4 5 6 7 8 8 8 7: 4 4 4 5 6 8 8 8 3: 4 4 4 5 6 8 8 8 2: 4 4 4 5 6 8 8 8 4: 4 4 5 6 8 8 8 2: 4 4 5 6 8 8 8 2: 4 4 5 6 8 8 8 6: 4 4 5 8 8 8 9: 4 4 5 8 8 8

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧