Download SO13 - Repaso

Document related concepts
no text concepts found
Transcript
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