Realizou-se no início deste mês a frequência de POO de 1º fase do ISCTE.
A frequência dividiu-se em duas partes: uma com perguntas de escolha múltipla e outra com questões práticas para os alunos programarem em JAVA.
Se fores a 2ª fase e precisares de um empurrão, marca uma explicação! Entretanto deixo, em baixo, uma proposta de correção da parte 2:
Parte 2 – Pergunta A
public class Contact { private String nome; private int telefone; public Contact(String nome) throws IllegalArgumentException { if(nome.split(" ").length>1) { this.nome=nome; }else { throw new IllegalArgumentException("O nome tem de conter, pelo menos duas palavras"); } } public Contact(String nome, int telefone) throws IllegalArgumentException { if(nome.split(" ").length>1) { this.nome=nome; this.telefone=telefone; }else { throw new IllegalArgumentException("O nome tem de conter, pelo menos duas palavras"); } } public String getPrimeiroNome() { return nome.split(" ")[0]; } public String getUltimoNome() { String [] nomeDividido = nome.split(" "); String ultimoNome=nomeDividido[nomeDividido.length-1]; return ultimoNome; } public boolean temNome(String palavra) { if(nome.contains(palavra)) { return true; }else { return false; } } public String getNome() { return nome; } }
Parte 2 – Pergunta B
import java.util.Comparator; public class ComparadorContact implements Comparator<Contact>{ @Override public int compare(Contact o1, Contact o2) { return o1.getUltimoNome().compareTo(o2.getUltimoNome()); } }
Parte 2 – Pergunta C
public interface ContactSelector { boolean valido(Contact c); } public class FiltroNome implements ContactSelector{ private String nomeAProcurar; public FiltroNome(String nomeAProcurar) { this.nomeAProcurar=nomeAProcurar; } @Override public boolean valido(Contact c) { if(c.getNome().contains(nomeAProcurar)) { return true; }else { return false; } } }
Parte 2 – Pergunta D
import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class AddressBook { //Alínea a) private List<Contact> contatos = new ArrayList<Contact>(); //Alínea b) public AddressBook(File f) throws FileNotFoundException { FileReader fr=new FileReader(f); Scanner scanner = new Scanner(fr); String nome; int numero; while(scanner.hasNextLine()) { nome=scanner.nextLine(); numero=Integer.valueOf(scanner.nextLine()); contatos.add(new Contact(nome, numero)); } scanner.close(); } //Alínea c) public int getNumeroContatos() { return contatos.size(); } //Alínea d) public List<Contact> getContatosSeletor(ContactSelector cs) { List<Contact> contatosFiltrados = new ArrayList<>(); for(Contact c: contatos) { if(cs.valido(c)) { contatosFiltrados.add(c); } } contatosFiltrados.sort(new ComparadorContact()); return contatosFiltrados; } public List<Contact> getContatosComNome(String nomeAProcurar) { List<Contact> contatosFiltrados = new ArrayList<>(); for(Contact c: contatos) { if(c.getNome().contains(nomeAProcurar)) { contatosFiltrados.add(c); } } contatosFiltrados.sort(new ComparadorContact()); return contatosFiltrados; } public List<Contact> getContatos() { return contatos; } public void ordenaContatos() { contatos.sort(new ComparadorContact()); } public void adicionaContato(String nome, int numero) { contatos.add(new Contact(nome, numero)); } }
Parte 2 – Pergunta E
import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class AddressBookEx extends AddressBook{ private HashMap<String, List<Contact>> grupoContatos; public AddressBookEx(File f) throws FileNotFoundException { super(f); grupoContatos = new HashMap<String, List<Contact>>(); } public void adicionaContato(String nomeGrupo, String nome, int numero) { if(grupoContatos.containsKey(nomeGrupo)) { //se o grupo ja existir //grupoContatos.get(nomeGrupo) devolve a lista do grupo grupoContatos.get(nomeGrupo).add(new Contact(nome,numero)); }else { //se o grupo nao existir List<Contact> contatosGrupo = new ArrayList<>(); //criar lista de contatos para o grupo contatosGrupo.add(new Contact(nome, numero)); grupoContatos.put(nomeGrupo, contatosGrupo); } } }