Java, exercício de análise
assunto: map, hashmap
Pergunta:
Pretende-se um programa destinado a modelizar um conjunto de pássaros, especificamente canários e periquitos. Em termos de funcionalidades requeridas, apenas se pretende inserir novas instâncias de pássaros e manter um mapeamento entre os tipos e as respectivas quantidades. Sendo assim, complete o código da Listagem C de modo a que o resultado da sua execução seja: {Piriquito=10, Canario=10}. A classe Passaro encontra-se declarada como abstracta de modo a não poder ser instanciada, não sendo necessário alterá-la. As classes Periquito e Canario requerem a redefinição dos seguintes métodos: String toString(), boolean equals(Object o) e int hashCode().
A interface Map, sendo K o tipo da chave e V o tipo do valor associado, inclui, entre outros, os métodos V put(K k, V v) e V get(Object k). Ambos devolvem o valor associado à chave k fornecida, antes de substituir o valor já existente pelo novo valor v fornecido no caso do put, ou null caso esta não seja encontrada.
package recursopa2; import java.util.HashMap; import java.util.Map; abstract class Passaro { public static String PASSARO = "Passaro"; public static String PERIQUITO = "Periquito"; public static String CANARIO = "Canario"; //fabrica de objectos public static Passaro criaPassaro(String tipoPassaro) { if (tipoPassaro.equalsIgnoreCase(PERIQUITO)) { return new Periquito(); } else if (tipoPassaro.equalsIgnoreCase(CANARIO)) { return new Canario(); } else { return null; } } } class Periquito extends Passaro { public String toString() { return "Periquito"; } public boolean equals(Object ob) { //return ob instanceof Periquito; //ou em alternativa return getClass() == ob.getClass(); } public int hashCode() { return PERIQUITO.hashCode(); } } class Canario extends Passaro { public String toString() { return "Canario"; } public boolean equals(Object ob) { return ob instanceof Canario; } public int hashCode() { return CANARIO.hashCode(); } } class MainPassaro { public static void adicionaPassaro(Passaro p, Map<Passaro, Integer> gaiola) { if (gaiola == null || p == null) { return; } Integer quantidade = gaiola.get(p); //se não tive cananrio, a quantidade vem null //se já tiver algum, a quantidade vair ser >0 if (quantidade == null) { gaiola.put(p, 1); //acrescentamos um elemento novo } else { gaiola.put(p, quantidade + 1); //adiciono um novo, com um update quantidade } } public static void main2(String args[]) { //Map</*..f..*/> gaiola = new HashMap<>(); //resolução: Map<Passaro, Integer> gaiola = new HashMap<>(); Passaro p; for (int i = 0; i < 10; i++) { adicionaPassaro(Passaro.criaPassaro(Passaro.PERIQUITO), gaiola); adicionaPassaro(Passaro.criaPassaro(Passaro.CANARIO), gaiola); } System.out.println(gaiola); } } ////para testar public class main { public static void main(String[] args) { MainPassaro.main2(args); } }Tags : java, Programação avançada
0 thoughts on “Java, exercício de análise”