2016-11-15 8 views
0

thisなどのエントリを無効にするこのコードを作成して、LinkedListのHashMapからエントリを削除しました。HashMap.get(linkedList)の結果としてClassCastExceptionがスローされる

//Dbase in question 
    HashMap<String, LinkedList<Item>> authorDbase = new HashMap<String, LinkedList<Item>>(); 
    TreeMap<String, Item> bookAisle = new TreeMap<String, Item>(); 
    ... 
    Item book = bookAisle.get(title); // book == title's Item object reference 
    authorDbase.get(author).remove(book); //Removes the item mapped to specified keyword 

これが一部である機能がメインで呼び出されると、次のエラーが発生します。ここで

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to library.Item 
     at library.Item.compareTo(Item.java:8) 
     at java.util.TreeMap.getEntry(TreeMap.java:352) 
     at java.util.TreeMap.remove(TreeMap.java:603) 
     at library.Library.removeBook(Library.java:287) 
     at Assignment3.removeBook(Assignment3.java:134) 
     at Assignment3.main(Assignment3.java:118) 

は、私は私の削除アルゴリズムと間違って何Comparable<Item>

8 public abstract class Item implements Comparable<Item> 
    9 { 
... 
26  @Override 
27  public int compareTo(Item i) 
28  { 
29 //  String title = this.title; DEBUG FLAG: delete maybe? 
30   return this.title.compareTo(i.title); //Returns a negative value if title < i.title, implements alphabetical order by title 
31  } 

を実装する方法ですか?私はそれが不正な引数でcompareToを使用しようとしていることを理解しています。それは例外を投げているものですが、HashMap.get(listWanted)の結果からLinkedList<Item>の関数を呼び出すことはできませんか? Comparableはなぜここにファクタですか?誰かが修正を提案し、これについて私の理解を修正してもらえますか?

EDIT

ライン118は、単に削除アルゴリズムは、ここで

118   removeBook(out, "The Curious Incident of the Dog in the Night-Time"); 

であることは、あなたがbookAisle.removeを呼び出している行287でremoveBook

279  public boolean removeBook(String title) 
280  { 
281   Item book = bookAisle.get(title); // book == title's Item object reference 
282   String author; 
283   boolean successFlag = false; 
284 
285   if(book == null) //title doesn't exist in the bookAisle 
286    successFlag = false; 
287   else if (bookAisle.remove(book) != null) //It does exist and was removed 
288    { 
289     //Deletes from author dbase 
290     author = book.getCreator(); //placed here to avoid potentially calling on a null object 
291     authorDbase.get(author).remove(book); //Removes the item mapped to specified keyword 
292     //Deletes from keyword dbase 
293     removeFromKDbase(book); //Removes object reference from KDbase 
294     successFlag = true; 
295    } 
296 
297   return successFlag; 
298  } 
+1

Assignment3.javaの行118を表示してください。 –

+0

あなたの 'book'変数は' Item'型ではなく 'String'型ですか? –

+0

スタックトレースには、HashMapではなくTreeMapが表示されます。あなたのコードはそれを示していません。 –

答えて

2

であることをremove関数を呼び出します(書籍)、0123を含むTreemapからItemを効果的に削除しようとしていますをキーとします。
(ツリーマップのJavadocを:「指定されたキーがマップ内に現在あるキーと比較できない場合にjava.lang.ClassCastExceptionがスローされます」)

あなたはbookAisle.remove(title)に行を変更した場合、それは動作するはずです。

+0

Brilliant、@SeanPatrickFloydはスタックトレースがTreeMapであり、エラーを発見したと指摘しました。ありがとう! –

関連する問題