2016-10-01 5 views
0

У меня много проблем с назначением для моего класса структур данных. Мне нужно реализовать двойную очередь приоритетов с использованием дважды связанногоList, но код, который мой профессор предоставил для тестирования, имеет в нем какие-то странные вещи. Часть, которую я не понимаю, почему он использует DoubleEndedPriorityQueue, но затем добавляет объекты вместо целых. Ошибка, которую я получаю, заключается в том, что нет метода add (object), который является истинным.Проблемы с общей двукратной очередью приоритетов

public class Test1ForAssign2 { 
public static void main(final String[] args) { 

final DoubleEndedPriorityQueue<Integer> sampleL = (DoubleEndedPriorityQueue<Integer>)new ListDoubleEndedPriorityQueue(); 

sampleL.add((Object)5); 
sampleL.add((Object)12); 
sampleL.add((Object)5); 
sampleL.add((Object)1); 
sampleL.add((Object)(-7)); 
sampleL.add((Object)3); 
System.out.println("Priority Queue Contents: "); 
System.out.println("Deleting: " + sampleL.deleteMin()); 
System.out.println("Deleting: " + sampleL.deleteMax()); 
} 

public interface DoubleEndedPriorityQueue<AnyType>{ 
void makeEmpty (); 
void add (AnyType x); 
AnyType deleteMin (); 
AnyType deleteMax (); 
AnyType findMin (); 
AnyType findMax (); 
boolean isEmpty (); 
} 

ответ

0

Как вы говорите, это в настоящее время код не будет компилироваться - вы должны либо сделать sampleL в DoubleEndedPriorityQueue<Object> или отливать Интс в целое вместо:

sampleL.add((Integer)5); 

Там также лучше способ получить типы оболочки:

sampleL.add(Integer.valueOf(5)); 

Я думаю, что намерение здесь, вероятно, чтобы избежать неявного Autoboxing - Java будет автоматически конвертировать между обертками и примитивными типами, но хорошо сделать это явным. Особенно, когда речь идет о дженериках, это может стать довольно запутанным, и (особенно при обучении) хорошо не полагаться на эти ярлыки.

+0

Спасибо @hugh, вот что я подумал. Кстати, не могли бы вы помочь мне с чем-то еще? он также дал нам этот код: частный компаратор cmp; частный узел first = null; частный узел last = null; , но я понятия не имею, как использовать компаратор, я пытаюсь выполнить cmp.compare (obj1, obj2), но он всегда дает мне исключение nullpoint, и я уверен, что оба объекта не равны нулю. Я думаю, это потому, что класс Integer не реализует компаратор, но как он ожидает от нас этого? –

+0

(Как правило, это плохое решение для публикации нескольких вопросов в одном месте, но я постараюсь дать некоторые указатели). Integer не реализует Comparator, но он реализует Comparable - если вы ищете те, которые вы сможете найти в статьях на как они отличаются. 'compare' может вызывать NPE, если любой из аргументов равен NULL, в противном случае это похоже на то, что код в' compare' неверен (возможно, использует поле с нулевым значением без нулевой проверки). Вы используете отладчик? Использование одного сделает вашу жизнь намного лучше. – hugh