2016-10-01 7 views
0

私のデータ構造クラスの割り当てに多くの問題があります。私は二重にlinkedListを使用してダブルエンド優先順位のキューを実装する必要がありますが、私の教授がそれをテストするために提供したコードにはいくつか変なものがあります。私が理解していない部分はなぜDoubleEndedPriorityQueueを使用していますが、Integersの代わりにオブジェクトを追加する理由です。私が得ているエラーは、メソッドadd(オブジェクト)がtrueであるということです。一般的なダブルエンド優先順位キューの問題

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を作る、またはその代わりにINTEGERにint型にキャストするか必要があります。

sampleL.add((Integer)5); 

はへのよりよい方法もありますラッパーの種類を取得:

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

私はここでの意図は、暗黙的なオートボクシングを避けるためにおそらくだったと思うだろう - Javaは自動的にラッパーとプリミティブ型の間で変換されます、これを明示的にすることは良いことです。特にジェネリックが心配している場合、これは非常に混乱する可能性があります(特に学習時)、そのショートカットに頼らないのは良いことです。

+0

ありがとう@hughは私が思ったものです。あなたは何か他のもので私を助けてもらえますか?彼はまた私達にこのコードを与えました: プライベートコンパレータ<?スーパーAnyType> cmp; プライベートノード first = null; プライベートノード last = null; しかし、私はどのようにコンパレータを使用するかわからない、私はcmp.compare(obj1、obj2)をしようとしてきましたが、それは常に私にnullpointの例外を与えると私は両方のオブジェクトがnullではないと確信しています。 IntegerクラスはComparatorを実装していないためだと思いますが、どうやったら私たちはそれをどうしたらいいのでしょうか? –

+0

(いくつかの質問を1つの場所に投稿するのは悪い習慣ですが、いくつかのポインタを出そうとします)IntegerはComparatorを実装していませんが、Comparableを実装しています。これらがどのように異なるか。引数のいずれかがnullの場合、 'compare'はNPEを投げることができます。それ以外の場合は、' compare'のコードが正しくないように聞こえます(おそらくヌルチェックなしのnullableフィールドを使います)。デバッガを使用していますか? 1つを使用すると、あなたの人生が大きく向上します*。 – hugh

関連する問題