2016-04-13 15 views
2

QueueItem nesnesini içeren bir öncelik sırası oluşturdum. Ancak, QueueItem sınıfında zaten getPriority() uygulamış olmama rağmen, PriorityQueue sınıfının insert() yönteminde hala cannot resolve method getPriority() diyor. İşteNeden Java bu yöntemi uyguladığımda "getPriority() yöntemini çözemiyor" diyor?

public class PriorityQueue<QueueItem> implements Iterator<QueueItem> { 
    private int maxSize; 
    private int size; 
    private Map<Integer, List<QueueItem>> pq; 

    public PriorityQueue(int maxSize) { 
    if (maxSize < 0) throw new IllegalArgumentException(); 
    this.maxSize = maxSize; 
    pq = new HashMap<Integer, List<QueueItem>>(); 
    } 

    public boolean isEmpty() { 
    return size == 0; 
    } 

    public int size() { 
    return size; 
    } 

    public void insert (QueueItem item) { 
    int priority = item.getPriority(); //here is where the problem occured 
    // pq.get(priority) 
    } 
} 

benim QueueItem sınıftır: Gördüğünüz gibi

public class QueueItem implements Comparable{ 
    private int priority; 
    private Object value; 

    public QueueItem() { 
    priority = -1; 
    value = null; 
    } 

    public QueueItem(int priority, Object value) { 
    this.priority = priority; 
    this.value = value; 
    } 

    public int getPriority() { 
    return priority; 
    } 

    public Object getValue() { 
    return value; 
    } 

    public int compareTo(Object o) { 
    if (!(o instanceof QueueItem)) throw new ClassCastException(); 
    if (((QueueItem)o).getPriority() == -1) throw new NullPointerException(); 
    return priority - ((QueueItem) o).getPriority(); 
    } 
} 

, yöntem getPriority() sadece bir tamsayı öncelik verir

İşte benim PriorityQueue sınıftır.

Yaptığım hatayı işaret edebilecek biri varsa, şimdiden teşekkür ederim. Teşekkürler.

+0

Başka hatalarınız var mı? 'PriorityQueue',' Yineleyici’yi uygular ancak uygulanan 'yineleyici 'yöntemlerini göremiyorum. –

+0

@JonnyHenly Yerden tasarruf etmek için FirstityQueue sınıfının geri kalanını yapıştırmadım, Iterator uyguladım. – BroLegend

+0

@JonnyHenly elbette ... – BroLegend

cevap

2

OH. Bana yüze bakıyordu.

public class PriorityQueue<QueueItem> implements Iterator<QueueItem> { 
//      ^^^^^^^^^^^ 

Bunu gölgeler sınıfın QueueItem aynı adı taşıyan burada bir tür değişken bildirerek ediyoruz. sadece o kaldırmak istediğiniz

Yani bence :

public class PriorityQueue implements Iterator<QueueItem> { 

sonra ben bunu düzeltmek için yapmanız gereken tam olarak ne olduğundan emin değilim genel olması PriorityQueue yönelik edin. Ham tip Comparableisn't good kullanarak,

public class PriorityQueue<E> implements Iterator<QueueItem<E>> { 
    ... 
    private Map<Integer, List<QueueItem<E>>> pq; 
    ... 
} 

public class QueueItem<E> implements Comparable<QueueItem<E>> { 
    ... 
    private E value; 
    ... 
} 

Bir yan not olarak: Belki böyle bir şey istemez. Jenerik olmayan class QueueItem ile bile implements Comparable<QueueItem> olmalıdır.

+1

Vay haklısın, sadece OP'nin kodunu Eclipse'e kopyaladım ve bana tam olarak ne söylediğine dair bir uyarı verdim. +1 –

+0

Çok teşekkürler, hatayı düzeltir. – BroLegend

İlgili konular