2009-04-22 19 views
1

HashMapの値のインスタンスを数える方法を試していません。 私は、Objectクラスに付属しているメソッドが、私を助けることができるかのように見えているので、それらを動作させるようにしようとしましたが、どこか間違ったことをしているに違いありません。オブジェクトをHashMapにキャストする

簡単な方法がある場合は、まだ見つかりませんでした。 注意:ライブラリは私のHashMapです。

public void borrowBooks(String id, String name, String sid, String sname) { 
    if((getKeyFromValue(Books, name).equals(id))&&(getKeyFromValue(Students, sname).equals(sid))){ 
     if((Object)Library.countValues(sid)!=5){ 
      Library.put(id, sid); 
     } 
     else{ 
      System.out.println("You have exceeded your quota. Return a book before you take one out."); 
     } 
    } 
} 
+0

どのようにあなたのライブラリが定義されていますか?値は学生ID文字列のようですか?キーとは何ですか? – MStodd

答えて

3

どのドックを見ていますか? HashmapのJavadocは、countValues()メソッドを指定していません。

あなたはHashMap<String, List<String>>と思っています(あなたのコードを正しく読んでいる場合)。

学生1人につきリストを作成し、それをHashMapに配置する必要がありますが、List.size()を使用してリスト内のエントリを数えるだけです。

スレッドなどを無視

if (Library.get(id) == null) { 
    Library.put(id, new ArrayList<String>()); 
} 
List<String> books = Library.get(id); 
int number = books.size() // gives you the size 

3

まず:史上Objectには、何もキャストにはポイントは(ほとんど)はありません。すべてがObjectに拡張されているので、キャストなしでいつでもメソッドにアクセスできます。

第2:キャストしている方法は実際にはライブラリではなく戻り値をキャストします。

if(((Object)Library).countValues(sid) != 5) 

第三:あなたが本当に必要だったのキャストをしていた場合は、括弧の余分なセットを必要とするHashMapまたはObjectのどちらかにはcountValues方法はありません。あなたは自分で作る必要があります。

これは、使用する一般的なアルゴリズム(これは宿題のように見えるので、私はコードをポストすることを躊躇よ)である:

initialize count to 0 
for each entry in Library: 
    if the value is what you want: 
     increment the count 
0
int count = 0; 

for(String str : Library.values()) 
{ 
    if(str == sid) 
     count++; 
    if(count == 5) 
     break; 
} 

if(count < 5) 
    Library.put(id, sid); 
else 
    System.out.println("You have exceeded your quota. Return a book before you take one out."); 
関連する問題