Добавляю в main создание мапа и вывод на печать с обеих функций, выполняю без проверки - все работает и считает правильно. Комментю вывод, запускаю на проверку - пишет ошибку - имена посчитаны правильно, а фамилии - нет. Как это может быть?
package com.javarush.task.task08.task0815;
import java.util.*;
/*
Перепись населения
*/
public class Solution {
public static HashMap<String, String> createMap() { //создаем мап, где ключ - любой уникальный, а значение - фамилия и имя
HashMap<String, String> human = new HashMap<>();
human.put("one", "Ivanov Ivan");
human.put("two", "Ivanov Petr");
human.put("three", "Petrov Ivan");
human.put("four", "Sidorov Petr");
human.put("five", "Menshov Vera");
human.put("six", "Koslov Ivan");
human.put("seven", "Ivanov Semen");
human.put("eight", "Alekseev Vera");
human.put("nine", "Danilov Petr");
human.put("ten", "Kusnezov Aleksey");
return human;//напишите тут ваш код
}
public static int getCountTheSameFirstName(HashMap<String, String> map, String name) {
Collection<String> firstName = new HashSet<>(map.values()); //выбираем значения мапа в сет и перебираем итератором
int countFirst = 0;
Iterator<String> iterator = firstName.iterator();
while (iterator.hasNext()){
String s = iterator.next(); //режем строку по пробелу и сравниваем второе слово(имя) с заданным. если совпадает увеличиваем счетчик
String[] sRes = s.split(" ");
if (sRes[1].equals(name))
countFirst++;//напишите тут ваш код
}
return countFirst;
}
public static int getCountTheSameLastName(HashMap<String, String> map, String lastName) {
Collection<String> lasName = new HashSet<>(map.values());
int countLast = 0;
Iterator<String> iterator = lasName.iterator();
while (iterator.hasNext()){ //тоже, что и в первой функции, но с первым словом(фамилия)
String s = iterator.next();
String[] sRes = s.split(" ");
if (sRes[0].equals(lastName))
countLast++;
}
return countLast;
}
public static void main(String[] args) {
HashMap<String, String> human = new HashMap<>(createMap());
System.out.println(getCountTheSameLastName(human, "Ivanov"));
System.out.println(getCountTheSameFirstName(human, "Vera"));
}
}
Homval
41 уровень
Перепись населения - что не так?
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
--------Master
9 октября 2018, 09:15
Прочитай задание, что должно храниться в словаре - в твоем случае "one", "two" и т.д. - это фамилии, а имена состоят из двух слов (или наоборот, номер задания автором не прикреплен - посмотреть-уточнить нет возможности)
0
Homval
9 октября 2018, 12:02
В задании надо создать мап стринг-стринг и внести туда фамилии и имена. Так как key должен быть уникальным, то key - любая уникальная строка, а в строке value хранятся и имя и фамилия. Я понял так.
0
Homval
9 октября 2018, 12:04
Я пробовал делать мап <фамилия, имя>, но так как фамилии не уникальны, ничего не получалось.
0
--------Master
9 октября 2018, 13:55
В задании ясно сказано: "Фамилия" - "Имя", а не "Номер" - "Фамилия имя". Т.е. именно фамилия - ключ, имя - значение. Про то, что фамилия не должна быть уникальной, ничего не сказано - метод возвращает только 0 или 1, хоть это и не особо логично
0
Homval
9 октября 2018, 14:47
В задании надо считать объекты с одинаковыми фамилиями и одинаковыми именами
0
--------Master
9 октября 2018, 14:55
В задании надо написать два метода: один считает одинаковые фамилии (то, что одинаковых просто быть не может - не важно), второй - одинаковые имена.
0
Homval
9 октября 2018, 16:00
спасибо. Нашел ошибку - значения мап нельзя переносить в сет, только в лист, т.к. в сете все значения тоже должны быть уникальны.
0