轨道
/
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 或集合的形式获取 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,全部免费。