Percursos
/
Java
Java
/
Exercícios
/
Conhecedor de chamadas internacionais
Conhecedor de chamadas internacionais

Conhecedor de chamadas internacionais

Exercício de aprendizagem

Introdução

Mapas

Um Map é uma estrutura de dados para armazenar pares de chave-valor. É semelhante aos dicionários de outras linguagens de programação. A interface Map define operações sobre um Map.

O Java tem várias implementações diferentes de Map. O HashMap é uma das mais utilizadas.

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

Adiciona entradas ao Map com o put.

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

Só se pode associar um valor a cada chave. Chamar o put com a mesma chave atualiza o valor dessa chave.

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

Usa o get para obter o valor de uma chave.

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

Usa o containsKey para verificar se o Map contém uma determinada chave.

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

Remove entradas com o remove.

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

O método size devolve o número de entradas.

fruitPrices.size();  // Returns 2

Podes usar os métodos keySet ou values para obter as chaves ou os valores de um Map como um Set ou uma coleção, respetivamente.

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

Instruções

Neste exercício vais escrever código para gerir um dicionário de indicativos internacionais usando um Map.

O dicionário permite procurar o nome de um país (o valor do mapa, como String) através do indicativo internacional (a chave do mapa, como Integer).

1. Devolve os códigos num mapa

Implementa o método getCodes, que não recebe parâmetros e devolve um mapa que associa os indicativos aos países que estão atualmente no dicionário.

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

2. Adiciona entradas ao dicionário

É preciso preencher o dicionário. Implementa o método setDialingCode, que recebe um indicativo e o país correspondente e adiciona o indicativo e o país. Se o indicativo já estiver no mapa, atualiza o mapa com o indicativo e o país fornecidos.

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

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

3. Consulta o país de um indicativo

Implementa o método getCountry, que recebe um indicativo e devolve o nome do país correspondente ao indicativo.

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

4. Não permitas duplicados

Ao adicionar um indicativo, é preciso ter cuidado para impedir que um indicativo ou um país seja adicionado duas vezes. Nas situações em que isto acontece, pode assumir-se que a primeira entrada é a entrada correta. Implementa o método addNewDialingCode, que adiciona uma entrada para o indicativo e o país indicados. No entanto, ao contrário de setDialingCode, não faz nada se o indicativo ou o país já estiverem no mapa.

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. Encontra o indicativo de um país

É raro, mas podem cometer-se erros. Para corrigir o erro, vamos precisar de saber qual é o indicativo a que o país está atualmente associado. Para descobrir qual indicativo precisa de ser corrigido, implementa o método findDialingCode, que recebe um país e devolve o indicativo desse país. Devolve null se o país não estiver no mapa.

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

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

6. Atualiza o indicativo do país

Agora que sabemos qual indicativo precisa de ser corrigido, vamos atualizar o indicativo. Implementa o método updateCountryDialingCode, que recebe o novo indicativo do país e o nome do país e atualiza em conformidade. Não faças nada se o país não estiver no mapa (uma vez que este método serve apenas para ajudar a corrigir erros).

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

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

dialingCodes.updateCountryDialingCode(32, "Mars");
// => { 81 => "Japan"}
Editar via GitHub A ligação abre numa nova janela ou separador
Java Exercism

Estás pronto para começar Conhecedor de chamadas internacionais?

Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.