2012-05-24 2 views
0

My hashmap содержит ключ, который является именем клиента, а значения - все рейтинги для оцениваемых книг. Я должен рассчитать средний рейтинг для данного названия книги.java hashmap values ​​

Как получить доступ ко всем значениям (рейтингам) из hashmap? Есть ли способ сделать это?

Вот часть моего кода:

/** 
* calculate the average rating by all customers for a named book 
* only count positive or negative ratings, not 0 (unrated) 
* if the booktitle is not found or their are no ratings then 
* return NO_AVERAGE 
* @param booktitle String to be rated 
* @return double the average of all ratings for this book 
*/ 
public double averageRating(String booktitle) 
{ 
    numberOfRatingsPerCustomer/total 
} 
+2

HashMap лучше отображает ключ к одному значению , Можете ли вы уточнить, что такое структура данных? –

+0

Все Java 'Maps' (включая HashMaps) имеют [метод с именем' values ​​() '] (http://docs.oracle.com/javase/6/docs/api/java/util/Map.html#values ​​()), который возвращает набор значений. – maerics

+0

okay Я пытаюсь создать структуру данных, которая содержит все книжные списки, а затем клиент оценивает книги под своим именем. Вы можете рассказать, как рассчитать средний рейтинг –

ответ

1

Вы должны получить Keyset от HashMap. Затем перейдите по набору ключей и выберите значения из HashMap.

+0

Этот парень прав. Итерируйте набор ключей, и каждый ключ получит значение (которое будет вашим ArrayList) и будет использовать его. Более подробную информацию об этом вы должны прочитать API Java. –

+0

Более эффективна итерация entrySet(), чем итерация keySet() и вычисление хэша каждой клавиши для поиска значений один за другим. –

0

Ваш вопрос не имеет смысла.

У вас нет карты с customerName по номеру hisRatingOfBook, и поиск в ней для bookTitle. Вам нужно пройти один из 1 способов:

1) создать метод public double averageRating() внутри Book класса, и держать там, как поле, оценка, карты с customerName к hisRatingOfBook

2) Используйте метод:

public double averageRating(String booktitle) 
{ 
    numberOfRatingsPerCustomer/total 
} 

но сделать вашу карту что-то более сложного, который будет содержать customer и его rating (делаются из названия книги + скорости)

0

Здесь вы идете принять эти ниже код, это поможет вам найти свой рейтинг проблему Я сделал находят в среднем студенческих марок в классе

import java.util.*; 

public class QueQue { 

public static float getAverage(HashMap<String, ArrayList<Integer>> hm, String name) { 
    ArrayList<Integer> scores; 
    scores = hm.get(name); 
    if (scores == null) { 
     System.out.println("NOT found"); 
    } 

    int sum = 0; 
    for (int x : scores) { 
     sum += x; 
    } 
    return (float) sum/scores.size(); 
} 
public static void main(String[] args) { 
    HashMap<String, ArrayList<Integer>> hm = new HashMap<>(); 
    hm.put("Peter", new ArrayList<>()); 
    hm.get("Peter").add(10); 
    hm.get("Peter").add(10); 
    hm.get("Peter").add(10); 

    hm.put("Nancy", new ArrayList<>()); 
    hm.get("Nancy").add(7); 
    hm.get("Nancy").add(8); 
    hm.get("Nancy").add(8); 

    hm.put("Lily", new ArrayList<>()); 
    hm.get("Lily").add(9); 
    hm.get("Lily").add(9); 
    hm.get("Lily").add(8); 

    System.out.println("Find the average of the Peter"); 
    float num = getAverage(hm, "Peter"); 

} 
    }