StringTokenizer и HashMap (требуется логика) - PullRequest
0 голосов
/ 07 ноября 2011

Сценарий. Вам предоставлен текстовый файл ascii, содержащий записи за один день.Каждая строка в файле содержит одну запись улова, разделенную двоеточиями, с тремя полями:

CONTESTANTS_NAME:FISH_TYPE:FISH_WEIGHT

, например,

PETER:TUNNY:13.3

, которая указывает, что участник по имени PETER поймал ТОННИ, весящего 13,3 кг,Обратите внимание, что PETER, возможно, поймал более одной рыбы в день.

Как бы вы решили эту проблему, используя встроенные в Java классы Tokenizer и HashMap?

Ваш проект должен обеспечить следующий анализ:

  1. Общий вес рыбы каждого типа, пойманной за день.
  2. Общий вес рыбы, пойманной каждым участником.
  3. Три лучших участника оцениваются пообщий вес улова.

Причина, по которой я публикую это, заключается в том, что на первый взгляд я запаниковал, зная, что любая карта содержит только пару ключ-значение, и понятия не имел, как ее решить, посколькутри поля.У меня было два HashMaps, первый из них имел ключи с CONTESTANT-NAME, а второй - FISH_NAME и мог обеспечить необходимый анализ: для этого потребовалось несколько циклов, и я не уверен, что это хороший способ программирования,Если у кого-то есть лучший подход, пожалуйста, дайте мне знать.Мне просто нужна логика.

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Вы можете проверить класс таблицы, например Таблица гуавы (представьте, что это двумерная карта). Затем вы можете использовать CONTESTANT_NAME в качестве первого ключа, FISH_NAME в качестве второго и вес в качестве сохраненного значения.

Guava Table даже делает вид, что хорошо справляется с разреженными таблицами, поэтому я настоятельно рекомендую вам попробовать.

0 голосов
/ 07 ноября 2011

вы можете сделать комбо get / update / put на хэш-карте

Double contestantTotal = contestantMap.get(contestant);
if(contestantTotal ==null)contestantTotal = Double.getValue(0);//if it wasn't already in the map the returned value will be null
contestantTotal += weight;
contestantMap.put(contestant,contestantTotal );//put overwrites the previous values

Double fishTypeTotal = fishTypeMap.get(fishType);
if(fishTypeTotal ==null)fishTypeTotal = Double.getValue(0);
fishTypeTotal += weight;
fishTypeMap.put(fishType,fishTypeTotal);

для этого требуется всего 3 цикла один входной цикл и 2 выходных цикла

...