トラック
/
Java
Java
/
演習
/
国際電話の達人
国際電話の達人

国際電話の達人

学習演習

はじめに

Map

**Map**は、キーと値のペアを保存するためのデータ構造です。他のプログラミング言語の辞書に似ています。Mapインターフェースは、Mapに対する操作を定義しています。

Javaには、さまざまなMapの実装があります。HashMapは、よく使われる実装の1つです。

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

Mapに要素を追加するには、putを使います。

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

1つのキーに関連付けられる値は1つだけです。同じキーでputを呼び出すと、そのキーの値が更新されます。

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

キーの値を取得するには、getを使います。

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

特定のキーがMapに含まれているかどうかを確認するには、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メソッドを使うと、Mapのキーや値を、それぞれSetやコレクションとして取得できます。

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を学んでマスターできます。すべて無料です。