CompareTo方法中的空指针异常

时间:2014-09-13 04:22:00

标签: java

我班级的结构:

public class Priorityy implement Comparable {
    public int compareTo(Object pe) {
        Priorityy p = (Priorityy) pe;
        if (this.key < p.key) {    
            return 1;
        } else if (this.key > p.key) {
            return -1;
        } else {
            return 0;
        }
    }
}

问题是p.key总是为空,为什么会这样?我的数组初始化了其中的元素但是每当我尝试Arrays.sort(arr)时它总是抛出NullPointerException。

我该如何解决这个问题?

编辑:这是完整的代码,打印确实打印了数组arr的元素:

import java.util.Arrays;

class Priorityy implements Comparable {
    int size;
    int front = 0;
    int rear = 0;
    static Priorityy[] arr = new Priorityy[3];
    int key;
    String value;

    public Priorityy(int key, String value) {
        this.key = key;
        this.value = value;
        insert();
    }

    public void insert() {
        arr[front] = this;
        System.out.println(arr[front].value);
        while (front + 1 != 3) {
            front = front + 1;
        }
    }

    public Priorityy remove() {
        Priorityy x = arr[front];
        front = front - 1;
        return x;
    }

    public int compareTo(Object pe) {
        Priorityy p = (Priorityy) pe;
        if (this.key < p.key) {
            System.out.println(p.key);

            return 1;
        } else if (this.key > p.key) {

            System.out.println("3");
            return -1;
        } else {
            System.out.println("4");
            return 0;
        }
    }

    public static void main(String... s) {
        new Priorityy(10, "Watch");
        new Priorityy(40, "Laptop");
        new Priorityy(60, "Wallet");
        Arrays.sort(arr);
        for (Priorityy element : arr) {
            System.out.println(element.key);
            System.out.println(element.value);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

你以一种非常奇怪的方式将东西放入你的阵列。 但鉴于此,问题是您没有使用static字段来存储插入元素的下一个位置,因此下次创建Priorityy的实例时,该字段first再次包含零值。因此,您要将所有三个对象插入到数组的元素零中。

更改代码的一行,它将起作用:

int front = 0;

要:

static int front = 0;

我不知道您使用sizerear的位置,但您可能希望这些也是static

另一个建议:Java有一个很好的短语法,用于使用++或 - 运算符将变量的值增加或减少一个,所以你可以通过说:

来缩短内容。
front++;

而不是

front = front + 1;

(和front--代替front = front - 1

答案 1 :(得分:0)

根据您的代码

Priorityy p = (Priorityy)pe;
                         ^^ ---------- this is null

数组中有null个对象。正常处理null对象。

例如

if(pe instanceof Priorityy){ // return false for null object
     // your code goes here
}

最好使用Generic Comparable并使用Integer.compare(int,int)来比较两个int值。

class Priorityy implements Comparable<Priorityy> {
    public int compareTo(Priorityy pe) {
        if (pe != null) {
            return Integer.compare(this.key, pe.key);
        } else {
            // return what ever if pe is null
        }
    }
}