Треки
/
Java
Java
/
Вправи
/
Знавець міжнародних дзвінків
Знавець міжнародних дзвінків

Знавець міжнародних дзвінків

Навчальна вправа

Вступ

Мапи

Map - це структура даних для зберігання пар ключ-значення. Вона подібна до словників в інших мовах програмування. Інтерфейс Map визначає операції над мапою.

У Java є чимало різних реалізацій Map. HashMap - одна з найпоширеніших.

// Make an instance
Map<String, Integer> fruitPrices = new HashMap<>();

Додаваймо записи до мапи за допомогою put.

fruitPrices.put("apple", 100);
fruitPrices.put("pear", 80);
// => { "apple" => 100, "pear" => 80 }

З кожним ключем може бути повʼязане лише одне значення. Виклик put з тим самим ключем оновить значення цього ключа.

fruitPrices.put("pear", 40);
// => { "apple" => 100, "pear" => 40 }

Щоб отримати значення за ключем, скористаймося get.

fruitPrices.get("apple"); // => 100

Щоб перевірити, чи містить мапа певний ключ, скористаймося containsKey.

fruitPrices.containsKey("apple");  // => true
fruitPrices.containsKey("orange"); // => false

Видаляймо записи за допомогою remove.

fruitPrices.put("plum", 90);  // Add plum to map
fruitPrices.remove("plum");   // Removes plum from map

Метод size повертає кількість записів.

fruitPrices.size();  // Returns 2

За допомогою методів keySet або values можна отримати ключі чи значення мапи як Set або колекцію відповідно.

fruitPrices.keySet();  // Returns "apple" and "pear" in a set
fruitPrices.values();  // Returns 100 and 80, in a Collection

Вказівки

У цій вправі ми будемо писати код, який керує словником міжнародних телефонних кодів за допомогою Map.

Цей словник дає змогу знайти назву країни (значення мапи, String) за міжнародним телефонним кодом (ключ мапи, Integer),

1. Повернути коди в мапі

Реалізуйте метод getCodes, який не приймає параметрів і повертає мапу телефонних кодів країн, що наразі є у словнику.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.getCodes();
// => empty map 

2. Додайте записи до словника

Словник потрібно наповнити. Реалізуйте метод setDialingCode, який приймає телефонний код і відповідну країну та додає цей код і країну. Якщо телефонний код уже є в мапі, оновіть мапу наданими кодом і країною.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(679, "Unknown");
// => { 679 => "Unknown" }

dialingCodes.setDialingCode(679, "Fiji");
// => { 679 => "Fiji" }

3. Знайдіть країну за телефонним кодом

Реалізуйте метод getCountry, який приймає телефонний код і повертає назву країни, що відповідає цьому коду.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(55, "Brazil");
dialingCodes.getCountry(55);
// => "Brazil"

4. Не допускайте дублікатів

Додаючи телефонний код, треба подбати про те, щоб ні код, ні країну не було додано двічі. У таких ситуаціях можна вважати, що правильним є перший запис. Реалізуйте метод addNewDialingCode, який додає запис для заданих телефонного коду та країни. Однак, на відміну від setDialingCode, він нічого не робить, якщо телефонний код або країна вже є в мапі.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addNewDialingCode(32, "Belgium");
dialingCodes.addNewDialingCode(379, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }


dialingCodes.addNewDialingCode(32, "Other");
dialingCodes.addNewDialingCode(39, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }

5. Знайдіть телефонний код країни

Це трапляється рідко, але помилки бувають. Щоб виправити помилку, нам потрібно знати, з яким телефонним кодом наразі зіставлено країну. Щоб зʼясувати, який телефонний код потрібно виправити, реалізуйте метод findDialingCode, який приймає країну й повертає телефонний код цієї країни. Поверніть null, якщо країни немає в мапі.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(44, "UK");
dialingCodes.findDialingCode("UK");
// => 44

dialingCodes.findDialingCode("Unlisted");
// => null

6. Оновіть телефонний код країни

Тепер, коли ми знаємо, який телефонний код потрібно виправити, переходимо до оновлення коду. Реалізуйте метод updateCountryDialingCode, який приймає новий телефонний код країни та її назву й відповідно оновлює дані. Нічого не робіть, якщо країни немає в мапі (цей метод покликаний лише допомагати виправляти помилки).

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(88, "Japan");
// => { 88 => "Japan" }

dialingCodes.updateCountryDialingCode(81, "Japan");
// => { 81 => "Japan" }

dialingCodes.updateCountryDialingCode(32, "Mars");
// => { 81 => "Japan"}
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Java Exercism

Час розпочати Знавець міжнародних дзвінків?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.