Помогите понять вопрос, связанный с HashMap в Java - PullRequest
0 голосов
/ 22 ноября 2010

Мне дали задание, которое я немного запутался, чтобы понять.Вот формулировка вопроса:


Следующая программа должна прочитать файл и сохранить все его токены в переменной-члене.Ваша задача - написать единственный метод, который возвращает количество элементов в tokenMap, среднюю длину (в виде двойного значения) элементов в tokenMap и количество токенов, начинающихся с символа «a».


Здесь tokenMap является объектом типа HashMap<String, Integer>;

У меня есть некоторое представление о HashMap, но что я хочу знать, «ключевое значение» для требуемого HashMap - это один символ или целое слово??что я должен хранить в tokenMap.

Также, как я могу вычислить среднюю длину?

Ответы [ 5 ]

1 голос
/ 23 ноября 2010

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

an example line

приводит к HashMap, подобному этому

an : 2
example : 7
line : 4

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

  1. количество ключей (посмотрите на HashMap)
  2. средняя длина всех клавиш (опять же, достаточно просто)
  3. число, начинающееся с "а" (просто посмотрите на строку)

Затем создайте объект значения, содержащий эти значения, и верните его из метода, который выполняет статистику.

Я знаю, что дал больше информации, которая вам требуется, но кто-то другой может получить небольшую дополнительную помощь.

1 голос
/ 22 ноября 2010

Чтобы вычислить среднюю длину элементов в хэш-карте, вам придется перебрать их все, сосчитать длину и вычислить среднее.

Что касается вашего другого вопроса о том, что использовать для ключа, как мы должны знать? Хеш-карта может использовать практически любое значение * для ключа.


* Значение должно быть хешируемым, которое определяется по-разному для разных языков.

1 голос
/ 22 ноября 2010

Похоже, вы должны использовать все слово в качестве ключа.

Средняя длина токенов может быть вычислена путем суммирования длин каждого токена и деления на количество токенов.

В Java вы можете найти число токенов в HashMap с помощью tokenMap.size ().

Вы можете написать циклы, которые посещают каждого члена карты, например:

  for(String t: tokenMap.values()){
     //t is a token
  }

и если вы посмотрите строку в документации по API Java, вы увидите, что длину строки легко найти.

0 голосов
/ 23 ноября 2010

Должен ли я разделить его на основе слов или на основе каждого символа

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

Если файл, который вы читаете, имеет три строки:

int alpha;
int beta;
float delta;

Тогда у вас должно быть что-то вроде

<"int", 2>
<";", 3>
<"alpha", 1>
<"beta", 1>
<"float", 1>
<"delta", 1>

(Точка с запятой может или не может считаться токеном.) Ваша средняя длина будет (3x2 + 3x1 + 5 + 4 + 5 + 5) / 6. Ваша длина токенов, начинающаяся с «а», будет 5,0.

Найдите в другом месте на этом форуме набор ключей, и вы должны быть в порядке.

0 голосов
/ 22 ноября 2010

Ребята, есть некоторая путаница.Я не прошу решения.Я просто смущен с одной стороны.В настоящее время я собираюсь использовать тип String в качестве типа ключа.

Единственное недоразумение, которое у меня возникает, - это когда я читаю файл построчно, должен ли я разбивать его по словам или по каждому символу.Так что значение ключа должно быть строкой из одного символа или строкой целого слова.

Если вы можете пройти через вопрос, что вы предлагаете.Это все, что я прошу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...