我班级的结构:
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);
}
}
}
答案 0 :(得分:2)
你以一种非常奇怪的方式将东西放入你的阵列。
但鉴于此,问题是您没有使用static
字段来存储插入元素的下一个位置,因此下次创建Priorityy
的实例时,该字段first
再次包含零值。因此,您要将所有三个对象插入到数组的元素零中。
更改代码的一行,它将起作用:
int front = 0;
要:
static int front = 0;
我不知道您使用size
和rear
的位置,但您可能希望这些也是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
}
}
}