Решая задачу, столкнулся сразу с несколькими непонятными для меня моментами:
1. Почему рандом не работает на ключах?
2. Почему метод поиска совпадений фамилий не всегда работает корректно? Один раз может указать верное значение, другой - неверное..
3. Почему валидатор не пропускает п. 4?
Спасибо!
package com.javarush.task.task08.task0815;
import java.util.*;
/*
Перепись населения
*/
/**
Перепись населения
Создать словарь (Map<String, String>) занести в него десять записей по принципу "Фамилия" - "Имя".
Проверить сколько людей имеют совпадающие с заданным именем или фамилией.
Требования:
1. Программа не должна выводить текст на экран.
2. Программа не должна считывать значения с клавиатуры.
3. Метод createMap() должен создавать и возвращать словарь Map с типом элементов String, String
состоящих из 10 записей по принципу «Фамилия» - «Имя».
4. Метод getCountTheSameFirstName() должен возвращать число людей у которых совпадает имя.
5. Метод getCountTheSameLastName() должен возвращать число людей у которых совпадает фамилия.
*/
public class Solution {
public static Map<String, String> createMap() {
//напишите тут ваш код
Map<String,String> map = new HashMap<>();
String[] names = {"Alexander", "Zakk", "Marie", "Kandy", "Pamela", "Connor",
"Ozzy", "Lita", "Ash", "Joe"};
String[] surnames = {"Ovechkin", "Wilde", "Curie", "Dulfer", "Anderson",
"McDavid", "Osbourne", "Ford", "Hollywood", "Thornton"};
Random random = new Random();
while (map.size() < 10) {
map.put(names[random.nextInt(names.length)], surnames[random.nextInt(surnames.length)]);
}
return map;
}
public static int getCountTheSameFirstName(Map<String, String> map, String name) {
//напишите тут ваш код
int namesCount = 0;
ArrayList<String> key = new ArrayList<>(map.keySet());
for (int i = 0; i < key.size(); i++) {
if (key.get(i).equals(name))
namesCount++;
}
return namesCount;
}
public static int getCountTheSameLastName(Map<String, String> map, String lastName) {
//напишите тут ваш код
int surnamesCount = 0;
ArrayList<String> value = new ArrayList<>(map.values());
for (int i = 0; i < value.size(); i++) {
if (value.get(i).contains(lastName))
surnamesCount++;
}
return surnamesCount;
}
public static void main(String[] args) {
System.out.println(createMap());
System.out.println(getCountTheSameFirstName(createMap(), "Ozzy"));
System.out.println(getCountTheSameLastName(createMap(), "Curie"));
}
}