java 中对class的sort

来源:百度知道 编辑:UC知道 时间:2024/06/22 13:14:23
class state implements Comparable
{
int a, b;
public int compareTo(Object o)
{
state y = (state) o;
if(this.a == y.a)
{
if (this.b>y.b) return 1;
else if (this.b == y.b) return 0;
else return -1;
}
else if (this.a>y.a) return 1;
else return -1;
}
}
请问下
java中 定义如上的一个class state
以a为第一优先级 b为第二优先级排序 Arrays.sort(h); //h为一个state的数组
这么写 编译能过 输入数据后报错 为什么 thx~
应该怎么写

Exception in thread "main" java.lang.NullPointerException
at mypkg.state.compareTo(Main.java:14)
at java.util.Arrays.mergeSort(Arrays.java:1144)
at java.util.Arrays.mergeSort(Arrays.java:1155)
at java.util.Arrays.mergeSort(Arrays.java:1155)
at java.util.Arrays.mergeSort(Arrays.java:1155)
at java.util.Arrays.mergeSort(Arrays.java

1、问题出在将一个数组对象强制转化为state对象,即: state y = (state) o
经过这一强转化使引用变量y指向堆中的一个数组对象,在 if(this.a == y.a)
中的y.a是不成立的,因为y指向的数组对象中没有a这个成员变量所以要抛出空指针异常
2、温馨提示:引用类型的变量的强制转化只存在于继承关系(父类与子类)中或实现关系(实现类与接口)中,其它情况的强制转化将导致类型不兼容的运行时异常。

Exception in thread "main" java.lang.NullPointerException

主函数错误