Приведение объекта в HashMap - PullRequest
1 голос
/ 22 апреля 2009

У меня возникают проблемы с подсчетом экземпляров значений в HashMap. Я видел, что есть методы, прикрепленные к классу Object, которые выглядят так, как будто они могут помочь мне, поэтому я попытался использовать их для работы, но я должен где-то что-то делать не так.

Если есть более простой способ, я еще не нашел его. Примечание: библиотека - это мой 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." );
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 22 апреля 2009

Первый: Нет ( почти ) никакого смысла когда-либо приводить что-либо к Object. Поскольку все расширяется Object, вы всегда можете получить доступ к методам без приведения.

Секунда: То, как вы разыгрываете, фактически приводит к возвращаемому значению, а не к библиотеке. Если вы выполняете приведение, которое действительно необходимо, вам понадобится дополнительный набор скобок:

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
3 голосов
/ 22 апреля 2009

На какой документ вы смотрите? Javadoc для Hashmap не определяет метод countValues ​​().

Я думаю, что вы хотите HashMap<String, List<String>>, поэтому вы сохраняете список книг для каждого учащегося (если я правильно читаю ваш код).

Вам нужно будет создать список для каждого учащегося и поместить его в HashMap, но затем вы можете просто посчитать записи в Списке, используя List.size ().

1010 *, например *

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

Игнорирование потоков и т. Д.

0 голосов
/ 23 апреля 2009
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." );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...