2016-10-01 2 views
0

데이터 구조 클래스에 대한 할당에 많은 문제가 있습니다. 나는 doublely 우선 순위 대기열을 구현해야하는데, doublely linkedList를 사용하지만, 교수님이 테스트를 위해 제공 한 코드에는 이상한 것들이 있습니다. 이해가 안되는 부분은 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

,이 코드는 현재 컴파일되지 않습니다 - 당신이 중 하나 DoubleEndedPriorityQueue<Object>sampleL을 만들거나 대신 정수로의 int를 캐스팅해야합니다

sampleL.add((Integer)5); 

도에 더 좋은 방법이 있어요 래퍼 유형을 얻을 :

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

내가 여기 의도가 암시 오토 박싱을 피하기 위해 아마 생각 것 - 자바가 자동으로 래퍼 기본 형식 사이의 변환합니다, 이것을 명백하게하는 것이 좋습니다. 특히 제네릭에 관해서는 매우 혼란스럽고 (특히 배우는 경우) 그 지름길에 의존하지 않는 것이 좋습니다.

+0

감사합니다. @hugh 내가 생각했던 것입니다. 너 뭔가 다른 것을 도와 줄 수있어? 그는 또한 우리에게 다음과 같은 코드를주었습니다. 개인 Comparator cmp; 전용 노드 first = null; 개인 노드 마지막 = null; 하지만 나는 어떻게 비교기를 사용할지 전혀 모르겠다. 나는 cmp.compare (obj1, obj2)를 시도했지만 항상 nullpoint 예외를 주었고 두 객체가 모두 null이 아니라고 확신한다. Integer 클래스가 Comparator를 구현하지 않았기 때문에 그렇다고 생각합니다. 그렇다면 우리가 어떻게 그것을 수행 할 것으로 기대합니까? –

+0

(일반적으로 한 곳에서 여러 질문을 게시하는 것은 좋지 않지만 몇 가지 지침을 제시하려고합니다) Integer는 Comparator를 구현하지 않지만 Comparable을 구현합니다. - 해당 항목을 검색하면 관련 항목을 찾을 수 있어야합니다. 어떻게 다른지. 인수의 하나가 널인 경우'compare'는 NPE를 던질 수 있습니다. 그렇지 않으면'compare'의 코드가 올바르지 않은 것으로 들립니다. 아마도 널 검사없이 널값 필드를 사용합니다. 디버거를 사용하고 있습니까? 하나를 사용하면 삶이 엄청나게 좋아질 것입니다. – hugh

관련 문제