FUNDAMENTOS DE PROGRAMACIÓN Curso: 2010/11 PRIMER EXAMEN PARCIAL. SOLUCIONES EJERCICIO 1 (2,5 puntos) a) public interface Encuesta extends Copiable<Encuesta>, Comparable<Encuesta> { Integer getIdentificador(); Integer getEdad(); void setEdad (Integer e); Character getGenero(); Double getSalario(); void setSalario(Double s); Integer getDistrito(); Double getRelevancia(); } b) public class EncuestaNoValidaException extends RuntimeException { public EncuestaNoValidaException() { super(); } public EncuestaNoValidaException(String s) { super(s); } } c) public class EncuestaImpl implements Encuesta { private static final Double FACTOR_RELEVANCIA = 0.15; private private private private private Integer identificador; Integer edad; Double salario; Character genero; Integer distrito; public EncuestaImpl(Integer id, Integer edad, Double salario, Character genero, Integer distrito) { if((distrito < 1) || (distrito > 20)) { throw new EncuestaNoValidaException("Encuesta no válida"); } Identificador = id; this.edad = edad; this.salario = salario; this.genero = genero; this.distrito = distrito; } public Double getRelevancia() { return getSalario() * FACTOR_RELEVANCIA; } public int compareTo(Encuesta c) { return getIdentificador().compareTo(c.getIdentificador()); } public Encuesta clone() { Encuesta c = null; try { c = (Encuesta) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return c; } FUNDAMENTOS DE PROGRAMACIÓN Curso: 2010/11 PRIMER EXAMEN PARCIAL. SOLUCIONES public boolean equals(Object o) { boolean res=false; if(o instanceof Encuesta) { Encuesta e = (Encuesta) o; res =getIdentificador().equals(e.getIdentificador()); } return res; } public String toString() { return getIdentificador() + "," + getEdad() + "," + getGenero(); } public int hashCode() { return getIdentificador().hashCode(); } } EJERCICIO 2 (2,5 puntos) a) public interface EncuestaPolitica extends Encuesta { Boolean getAfiliado(); String getVoto(); } b) public class EncuestaPoliticaImpl extends EncuestaImpl implements EncuestaPolitica { private Boolean afiliado; private String voto; public EncuestaPoliticaImpl (Integer id, Integer edad, Double salario, Character genero, Integer distrito, String voto, Boolean afiliado) { super(id, edad, salario, genero, distrito); if((edad < 18) || (edad > 85)) { throw new EncuestaNoValidaException("Encuesta no válida"); } this.afiliado = afiliado; this.voto = voto; } public Boolean getAfiliado(){ return afiliado; } public String getVoto(){ return voto; } public String toString() { return super.toString() + "," + getVoto(); } public void setEdad(Integer e) { if((e < 18) || (e > 85)) { throw new EncuestaNoValidaException("Encuesta no válida"); } super.setEdad(e); } public Double getRelevancia() { Double res; FUNDAMENTOS DE PROGRAMACIÓN Curso: 2010/11 PRIMER EXAMEN PARCIAL. SOLUCIONES if (getAfiliado()) { res = 0.0; } else { res=super.getRelevancia(); } return res; } } EJERCICIO 3 (1,5 puntos) a) public class CuestionarioImpl<T> implements Cuestionario<T> { private String codigo; private List<T> informes; public CuestionarioImpl(String n) { codigo = n; informes = new LinkedList<T>(); } b) public void añadeInforme(T i) { getInformes().add(i); } public T recuperaInforme(Integer pos) { return getInformes().get(pos); } public void incorporaInformes(Cuestionario<T> c) { getInformes().addAll(c.getInformes()); } // Se considera válido también usar un for extendido EJERCICIO 4 (3,5 puntos) a) public static Integer votosPartidoMayorEdad ( Cuestionario<EncuestaPolitica> c, String partido, Integer edad) { Integer cont = 0; for (EncuestaPolitica e: c.getInformes()){ if(e.getVoto().equals(partido) && e.getEdad().compareTo(edad)>0){ cont++; } } return cont; } b) public static Double salarioMaximoPartido(Cuestionario<EncuestaPolitica> c, String partido) { Double max = null; for (EncuestaPolitica e: c.getInformes()) { if(e.getVoto().equals(partido)) { if (max == null) max = e.getSalario(); else if (e.getSalario().compareTo(max)>0) { max = e.getSalario(); } } FUNDAMENTOS DE PROGRAMACIÓN Curso: 2010/11 PRIMER EXAMEN PARCIAL. SOLUCIONES } return max; } c) public static Double resultadosPartido(Cuestionario<EncuestaPolitica> c, String partido) { Integer cont = 0; for (EncuestaPolitica e: c.getInformes()) { if(e.getVoto().equals(partido)) { cont++; } } return 100.0 * cont / c.getInformes().size(); } d) public static Encuesta buscaEncuesta(Cuestionario<Encuesta> c, Integer distrito, Integer edad1, Integer edad2) { Encuesta res = null; for (Encuesta e: c.getInformes()){ if(e.getDistrito().equals(distrito) && e.getEdad().compareTo(edad1) >= 0 && e.getEdad().compareTo(edad2) <= 0) { res = e; break; } } return res; } e) public static Set<Integer> distritos(Cuestionario<Encuesta> c){ Set<Integer> s = new HashSet<Integer>(); for(Encuesta e:c.getInformes()) { s.add(e.getDistrito()); } return s; }