이 메서드는 작동해야한다고 생각하지만 remove 메서드를 사용하려고 할 때 nullpointer 예외가 계속 발생합니다.두 문자열을 비교하는 동안 NullPointerException이 발생했습니다.
힙에 8 가지를 추가 한 다음 remove()
메서드를 사용하여 하나씩 차례로 인쇄하십시오. 두 번째 하나는 null 포인터 예외가 발생할 때마다,하지만 난 왜 몰라? 그래서, 나는 for 루프에서 System.out.println(example.remove());
을 시도했지만, 한 가지만 출력하면 null 포인터 예외가 생깁니다. 내 IDE는 null 포인터가 제거에서 나온 다음 percolate에서 나온 다음 비교에서 시작한다고 말합니다.
이 문제를 어떻게 해결할 수 있습니까?
public class GenericHeap<E> {
private int size;
int capacity = 10;
public E[] heap;
Comparator mycomparator;
public GenericHeap(Comparator c) {
this.size = 0;
heap = (E[]) new Object[capacity];
mycomparator = c;
}
public E remove() {
E returnval = heap[1];
heap[1] = heap[size];
size--;
this.pop();
this.percolatedown(1);
return returnval;
}
private void pop() {
E[] temp = (E[]) new Object[capacity];
System.arraycopy(heap, 0, temp, 0, size);
heap = temp;
}
private void percolatedown(int i) {
while (i * 2 <= size) {
int kid = minchild(i);
if (mycomparator.compare(this.heap[i], this.heap[kid]) == 1) {
E temp = this.heap[i];
this.heap[i] = this.heap[kid];
this.heap[kid] = temp;
}
i = kid;
}
}
private int minchild(int i) {
if ((i * 2) + 1 >= size) {
return i * 2;
} else {
if (mycomparator.compare(heap[i * 2], heap[(i * 2) + 1]) == -1) {
return i * 2;
} else if (mycomparator.compare(heap[i * 2], heap[(i * 2) + 1]) >0) {
return i * 2 + 1;
}
}
return i*2;
}
}
비교기 클래스 :
public class StringComparator implements Comparator <String> {
@Override
public int compare(String t, String t1) {
if (t.length() > t1.length()) { // null pointer here
return 1;
} else if (t.length()<t1.length()){
return -1;
}
if (t.compareTo(t1)<0) {
return 1;
}
if(t1.compareTo(t1)>0) {
return -1;
}
return 0;
}
}
나는이 예외 얻을 :
Exception in thread "main" java.lang.NullPointerException
at hw10.StringComparator.compare(StringComparator.java:10)
at hw10.StringComparator.compare(StringComparator.java:6)
at hw10.GenericHeap.percolatedown(GenericHeap.java:82)
at hw10.GenericHeap.remove(GenericHeap.java:53)
at hw10.Tester.main(Tester.java:62)
자바 결과 : (에서 System.out.println : 1
* nullpointer 예외 * :
이 시도? 스택 추적을 추가하고 NPE가 발생하는 행을 가리 키십시오. – A4L
생성자에 전달할 'mycomparator'의 구현을 표시 할 수 있습니까? – A4L
예, 저는이 사이트를 처음 접해 보았습니다. 특정 줄을 어떻게 가리키고 있습니까? 내가 넣고있는 대부분의 것들이 형식을 엉망으로 만들고 있기 때문에 어떤 키를 사용해야합니까? – tokola