FUNDAMENTOS DE PROGRAMACIÓN PRÁCTICA 13: REPASO Curso: 2010/11 Versión: 1.0.0 SOLUCIONES Ejercicio 1: interfaces y clases Apartado a) public CancionImpl(String nom, String in, Integer min, Integer seg, Integer a, String gen){ nombre = nom; interprete = in; duracion = new HoraImpl(min, seg); año = a; genero = gen; numeroDeReproducciones = 0; calificacion = 0; reproducir = true; } Apartado b) public int compareTo(Cancion c) { int r = 0; r = getNombre().compareTo(c.getNombre()); if (r == 0){ r = getInterprete().compareTo(c.getInterprete()); } return r; } Prueba en TestMusica Cancion c1 = new CancionImpl("Loca", "Shakira", 3, 4, 2010, "pop"); Cancion c2 = new CancionImpl("Quiero ser","Amaia Montero",4,21,2009,"pop"); if (c1.compareTo(c2) > 0) mostrar ("La canción c1 es mayor que c2"); else mostrar ("La canción c1 es menor o igual que c2"); Ejercicio 2: excepciones Clase Excepción public class CancionNoValidaException extends RuntimeException { private static final long serialVersionUID = 1L; public CancionNoValidaException() { super(); } public CancionNoValidaException(String info) { super(info); } } Modificaciones en CancionImpl public CancionImpl(String nom, String in, Integer min, Integer seg, Integer a, String gen){ if (min.equals(0) && seg.equals(0)) throw new CancionNoValidaException("La duración no es válida"); Práctica 13: Repaso if (!existeGenero(gen)) throw new CancionNoValidaException("El género no es válido"); nombre = nom; interprete = in; duracion = new HoraImpl(min, seg); año = a; genero = gen; numeroDeReproducciones = 0; calificacion = 0; reproducir = true; } private static String[] generosMusicales={"pop","rock","latino","country"}; private Boolean existeGenero(String g){ Boolean existe=false; for (String s: generosMusicales){ existe = existe || (s.equals(g)); if (s.equals(g)) { break; } } return existe; } public void setCalificacion(Integer c) { if (c<0 || c>5) throw new CancionNoValidaException( "La calificación debe estar comprendida entre 0 y 5"); calificacion = c; } Prueba en TestMusica Cancion c3 = new CancionImpl("Loca", "Shakira", 0, 0, 2010, "latino"); mostrar ("Canción: ", c3); c1.setCalificacion(7); Cancion c4 = new CancionImpl("Loca", "Shakira", 3, 4, 2010, "house"); mostrar ("Canción: ", c4); Ejercicio 3: estructuras de control Modificaciones en la interfaz ListaDeReproduccion Hora duracionLista(); Double calificacionLista(); Apartado a) public Hora duracionLista(){ Hora duracion = new HoraImpl(0, 0); for (Cancion c: getCanciones()){ duracion.suma(c.getDuracion()); } return duracion; } Apartado b) public Double calificacionLista(){ Double cal = new Double(0.0); for (Cancion c: getCanciones()){ cal += c.getCalificacion(); } 2 Práctica 13: Repaso 3 return (cal/getNumeroDeCanciones()); } Prueba en TestMusica ListaDeReproduccion playlist = inicializaListaDeReproduccion(); mostrar ("Lista: ", playlist); mostrar ("La duración de la lista es: " + playlist.duracionLista()); mostrar ("La calificación media de la lista es: " + playlist.calificacionLista()); Ejercicio 4: tratamientos secuenciales Clase Canciones // TODO Ejercicio 4a) - primeraCancionInterprete // Tratamiento: Búsqueda public static Cancion primeraCancionInterprete (List<Cancion> l, String interprete) { Cancion primera = null; for (Cancion c: l) { if (c.getInterprete().equals(interprete)) { primera = c; break; } } return primera; } // TODO Ejercicio 4b) - numeroCancionesGenero // Tratamiento: Sumatorio con filtrado public static Integer numeroCancionesGenero (List<Cancion> l, String genero) { Integer num = 0; for (Cancion c: l) { if (c.getGenero().equals(genero)) { num++; } } return num; } // TODO Ejercicio 4c) - cancionGeneroMasEscuchada // Tratamiento: Máximo con filtrado public static Cancion cancionGeneroMasEscuchada (List<Cancion> l, String genero) { Cancion masEscuchada = null; for (Cancion c: l) { if (c.getGenero().equals(genero)) { if (masEscuchada == null) { masEscuchada = c; } else if (c.getNumeroDeReproducciones().compareTo (masEscuchada.getNumeroDeReproducciones())>0) { masEscuchada = c; } } } return masEscuchada; } // TODO Ejercicio 4d) - cancionNombreContiene // Tratamiento: Existe public static Boolean cancionNombreContiene (List<Cancion> l, String palabra) { Boolean res = false; for (Cancion c: l) { res = res || c.getNombre().contains(palabra); if (c.getNombre().contains(palabra)) { Práctica 13: Repaso 4 break; } } return res; } // TODO Ejercicio 4e) - cancionMasAntigua // Tratamiento: Mínimo public static Cancion cancionMasAntigua (List<Cancion> l) { Cancion masAntigua = null; for (Cancion c: l) { if (masAntigua == null) { masAntigua = c; } else if (c.getAño().compareTo(masAntigua.getAño())<0) { masAntigua = c; } } return masAntigua; } // TODO Ejercicio 4f) - incrementaReproducciones // Tratamiento: Modificación con filtrado public static void incrementaReproducciones (List<Cancion> l) { for (Cancion c: l) { if (c.getReproducir()) { c.setNumeroDeReproducciones(c.getNumeroDeReproducciones()+1); } } } // TODO Ejercicio 4g) - cancionesCalificacionIgualOSuperiorA // Tratamiento: Filtrado public static List<Cancion> cancionesCalificacionIgualOSuperiorA (List<Cancion> l, Integer puntos) { List<Cancion> favoritas = new LinkedList<Cancion>(); for (Cancion c: l) { if (c.getCalificacion().compareTo(puntos)>=0) { favoritas.add(c); } } return favoritas; } Clase TestMusica // TODO Ejercicio 4a) - Test mostrar ("\nEjercicio 4a)\n==========="); mostrar ("La primera canción de Shakira es: ", Canciones.primeraCancionInterprete(playlist.getCanciones(), "Shakira")); // TODO Ejercicio 4b) - Test mostrar ("\nEjercicio 4b)\n==========="); mostrar ("El número de canciones del género latino es: ", Canciones.numeroCancionesGenero(playlist.getCanciones(), "latino")); // TODO Ejercicio 4c) - Test mostrar ("\nEjercicio 4c)\n==========="); mostrar ("La canción pop más escuchada es: ", Canciones.cancionGeneroMasEscuchada(playlist.getCanciones(), "pop")); // TODO Ejercicio 4d) - Test mostrar ("\nEjercicio 4d)\n==========="); mostrar ("¿Existen canciones con la palabra love en el título? ", Canciones.cancionNombreContiene(playlist.getCanciones(), "love")); // TODO Ejercicio 4e) - Test Práctica 13: Repaso mostrar ("\nEjercicio 4e)\n==========="); mostrar ("La canción más antigua es: ", Canciones.cancionMasAntigua(playlist.getCanciones())); // TODO Ejercicio 4f) - Test mostrar ("\nEjercicio 4f)\n==========="); mostrar ("Antes de incrementar el número de reproducciones: "); mostrar ("Número de reproducciones de la primera canción: ", playlist.getCanciones().get(0).getNumeroDeReproducciones()); Canciones.incrementaReproducciones(playlist.getCanciones()); mostrar ("Después de incrementar el número de reproducciones: "); mostrar ("Número de reproducciones de la primera canción: ", playlist.getCanciones().get(0).getNumeroDeReproducciones()); // TODO Ejercicio 4g) - Test mostrar ("\nEjercicio 4g)\n==========="); ListaDeReproduccion f = new ListaDeReproduccionImpl("Favoritas"); f.setCanciones(Canciones.cancionesCalificacionIgualOSuperiorA( playlist.getCanciones(),4)); mostrar (playlist); mostrar (f); 5