學習軌道
/
Java
Java
/
練習
/
國際通話行家
國際通話行家

國際通話行家

學習練習

簡介

Maps

Map 是一種用來儲存鍵值對的資料結構。 它和其他程式語言裡的字典很像。 Map 介面定義了 Map 上的各種操作。

Java 有許多不同的 Map 實作。 HashMap 是其中最常用的一種。

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

使用 put 把項目加入 map。

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 檢查 map 是否包含某個特定的鍵。

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 或集合的形式取得 Map 中的鍵或值。

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

說明

在這個練習中,你將撰寫程式碼,使用 Map 來管理一份國際撥號代碼的字典。

這份字典可以讓你透過國際撥號代碼(映射的鍵,型別為 Integer)查詢國家名稱(映射的值,型別為 String)。

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,透過 26 個概念158 個練習 和真人引導來學習並精通 Java,全部免費。