제 데이터 구조 클래스의 경우 숙제는 일반 힙 ADT를 만드는 것입니다. siftUp() 메소드에서 비교를해야하며 부모가 더 작 으면 스왑을 수행해야합니다. 내가 겪고있는 문제는 비교 연산자가 제네릭 형식에 유효하지 않다는 것입니다. 필자는 Comparable 인터페이스를 사용해야한다고 생각하지만 배열에서 사용하는 것은 좋지 않습니다. 나는이 사이트를 검색하고 나는 그들의이 게시물 것도 일반 힙의 비교 연산자
내가 관련되지 않았 음을 코드의 일부를 제거 해결책을 찾기 나를 도왔에 관련된 좋은 정보를 발견 감사public class HeapQueue<E> implements Cloneable {
private int highest;
private Integer manyItems;
private E[] data;
public HeapQueue(int a_highest) {
data = (E[]) new Object[10];
highest = a_highest;
}
public void add(E item, int priority) {
// check to see is priority value is within range
if(priority < 0 || priority > highest) {
throw new IllegalArgumentException
("Priority value is out of range: " + priority);
}
// increase the heaps capacity if array is out of space
if(manyItems == data.length)
ensureCapacity();
manyItems++;
data[manyItems - 1] = item;
siftUp(manyItems - 1);
}
private void siftUp(int nodeIndex) {
int parentIndex;
E tmp;
if (nodeIndex != 0) {
parentIndex = parent(nodeIndex);
if (data[parentIndex] < data[nodeIndex]) { <-- problem ****
tmp = data[parentIndex];
data[parentIndex] = data[nodeIndex];
data[nodeIndex] = tmp;
siftUp(parentIndex);
}
}
}
private int parent(int nodeIndex) {
return (nodeIndex - 1)/2;
}
}
내가 비교를 E 확장 할 때 생성자에서 캐스팅 오류가 발생합니다 data = (E []) new Object [10]; [Ljava.lang.Object; [Ljava.lang.Comparable; 클래스 HeapQueue> –
Chad
@Char : 대신 ArrayList을 사용하십시오. –
캐스팅 오류를 발견했습니다 ... Object를 Comparable 유형으로 변경하는 것을 잊었습니다. 도움을 주셔서 감사합니다 – Chad