Sunteți pe pagina 1din 12

Tema Tema 3 3

EJERCICIOS Conceptos de Java para Estructuras de Datos Genericidad

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

Ejercicio 3.1
Utilizando la clase ArrayList, escribe un programa (e.g. un main dentro de una clase TestCaja) que realice los siguientes pasos:
1. 2.

Construir un ArrayList con 10 Cajas de Enteros (Integer) con los primeros 10 nmeros impares; Recorrer el ArrayList para mostrar sus datos por pantalla

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

Solucin 3.1
import java.util.*; public class TestCaja { public static void main(String args[]) { // crear el vector ArrayList<Caja<Integer>> v = new ArrayList<Caja<Integer>>(10); // aadir 10 cajas for (int i=0; i<10; i++) { Caja<Integer> c = new Caja<Integer>(); c.setDato(new Integer(2*i+1)); v.add(c); } // recorrer el arralist y mostrar su contenido System out println(-- Contenido de las Cajas:); System.out.println( Cajas: ); for (int i=0; i<v.size();i++) System.out.println(v.get(i).getDato()); // o alternativamente for (Caja<Integer> c: v) System.out.println(c.getDato());

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

Ejercicio 3.2
Completa la clase Garaje (del tema 1). Falta por implementar los mtodos:
public bli void id guardarVehiculo(V d V hi l (V v, int i t plaza) l ) {} { }

public int leerCuota(int plaza) {}

public Vehiculo(int potencia); public int potencia();

Vehiculo

Coche
public Coche(int potencia, int numPlazas); public int numPlazas();

Moto
public Moto(int potencia);

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

Solucin 3.2
public void guardarVehiculo(V v, int plaza) { if ((plaza >= 0) && (plaza < numPlazas)) plazas.add(plaza, v); Casting para prevenir un cannot }

resolve symbol

- numPlazas numPlazas

error del compilador public int leerCuota(int plaza) { int cuota = 0; if ((plaza >= 0) && (plaza < numPlazas)){ /* obtiene en v el Vehiculo aparcado en plaza */ V v = plazas.get(plaza); if (v != null) { if (v instanceof Coche) cuota = v.potencia() * ((Coche) v).numPlazas(); else cuota = 2 * v.potencia(); } } return cuota; }

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

Ejercicio 3.3
Reescribe la clase Caja para exigir que Su contenido slo pueda ser numrico (es decir, una clase derivada de la clase Number). Number)

Contiene un nuevo mtodo en esta clase que devuelva la parte entera del valor numrico que contiene la caja.

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

Solucin 3.3
public class Caja<T extends Number> { private T dato; public Caja(){ super(); } public T getDato(){ return dato; } public void setDato (T d){ dato = d; } public int valorEntero() { return dato.intValue(); } }
Estructuras de Datos y Algoritmos 2008/2009 Tema 3

Ejercicio 3.4
Se pide disear una clase Genrica CajaPeso que extienda Caja<T> para aadirle el atributo peso y as poder saber si una j p pesa ms q que otra dada; ; se considerar adems q que dos Caja Cajas son iguales sii sus pesos son los mismos

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

Solucin 3.4
public class CajaPeso<T> extends Caja<T> implements Comparable<CajaPeso<T>>{ private int peso; public CajaPeso(){ super(); peso = 0; } public int getPeso(){ return peso; } public void setPeso(int p){ peso=p; } public int compareTo(CajaPeso<T> cP) { if (peso < cP.getPeso() ) return -1; else if (peso > cP.getPeso()) return +1; else return 0; } }

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

Ejercicio 3.5
Qu lneas producen error?
1. 2. 3. 4. 5. 6. 7. 8. 9.

Figura f1 = new Circulo(); Figura f2 = new Cuadrado(); System.out.println(f1.compareTo(f2)); Object x = f1; System.out.println(x.compareTo(f1)); System.out.println( (Comparable) x.compareTo(f1)); System.out.println( ((Comparable) x).compareTo(f1)); System.out.println( ((Figura) x).compareTo(f1)); System.out.println( f2.compareTo(x) );

10

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

10

Solucin 3.5
Qu lneas producen error?
1. 2. 3. 4. 5.

Figura f1 = new Circulo(); Figura f2 = new Cuadrado(); System.out.println(f1.compareTo(f2)); Object x = f1; System.out.println(x.compareTo(f1));

Cannot find symbol - method compareTo(Figura) Cannot find symbol - method compareTo(Figura)

6.

System.out.println( (Comparable) x.compareTo(f1));


7. 8. 9.

System.out.println( S t t i tl ( ((C ((Comparable) bl ) x).compareTo(f1)); ) T (f1)) System.out.println( ((Figura) x).compareTo(f1)); System.out.println( f2.compareTo(x) );

Cannot find symbol - method compareTo(java.lang.Object)


11

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

11

Ejercicio 3.6 (1/2)


Dada la siguiente clase Java: public class PeliculaEnDvd { protected String titulo; protected String director; protected int anyo; public PeliculaEnDvd(String t, String d, int a) { this.titulo = t; this.director = d; this.anyo = a; } public String toString () { return "Titulo:" + titulo + "Director:" + director + Ao:" + anyo; }
12

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

12

Ejercicio 3.6 (2/2)


Disear la clase Java PeliculaEnVenta que representa cualquier pelcula disponible para la venta. 1. Adems del ttulo, director y ao una PeliculaEnVenta disponga informacin sobre: Precio de la pelcula. Nmero de copias disponibles para la venta.
2.

Se desea que las PeliculaEnVenta puedan ser ordenadas de manera creciente segn el ao de estreno y, para el mismo ao, segn el orden alfabtico del ttulo. Se desea poder consultar el nmero de copias disponibles para su venta. Se desea poder decrementar el nmero de copias disponibles para su venta.

2.

3.

13

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

13

Solucin 3.6 (1/2)


public class PeliculaEnVenta { protected double precio; protected t t d i int t copiasDisponibles; i Di ibl public PeliculaEnVenta(String t, String d, int a, double p, int c) { super(t, d, a); this.precio = p; this.copiasDisponibles = c; } public int compareTo(PeliculaEnVenta o){ if (this.anyo < o.anyo) return -1; else if (this.anyo > o.anyo) return 1; else return this.titulo.compareTo(o.titulo) ; }
14

extends PeliculaEnDvd implements Comparable<PeliculaEnVenta>

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

14

Solucin 3.6 (2/2)


public boolean equals(Object x){ return ( this.compareTo((PeliculaEnVenta) x) == 0 ) ; } public int copiasDisponibles(){ return this.copiasDisponibles; } public void decrementarCopiasDisponibles(){ this.copiasDisponibles--; } } //Fin de la clase PeliculaEnVenta

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

15

Ejercicio 3.7

Disear la clase GrupoDePeliculas, que utiliza un array de PeliculaEnVenta. La talla del array es un parmetro del constructor. Disear toString() para que obtenga un listado ordenado de todas las pelculas disponibles. La ordenacin se realizar utilizando: el mtodo esttico insercionDirecta(T a[]); de la clase Ordenacion, en el paquete ordenacionArray:

16

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

16

Solucin 3.7
public class GrupoDePeliculas{ PeliculaEnVenta vPeliculas[]; public GrupoDePeliculas(int talla){ vPeliculas = new PeliculaEnVenta[talla]; } PeliculaEnVenta

implementa Comparable<PeliculaEnVenta> y sobreescribe compareTo

public String toString(){ Ordenacion.insercionDirecta(vPeliculas); for ( int i = 0 ; i < vPeliculas.length ; i++) System.out.println(vPeliculas[i]) } }

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

17

Ejercicio 3.8

Dentro de la clase GrupoDePeliculas, disea el mtodo void vender(PeliculaEnVenta aVender) throws PeliculaNoEncontrada.

Si la pelcula est disponible para la venta, actualiza el nmero de copias disponibles para la venta. Si era la ltima copia disponible, la pelcula se borra mediante el mtodo que se asume existe: borrarPelicula(PeliculaEnVenta p); Si la pelcula no est disponible, se lanza la excepcin PeliculaNoEncontrada (se asume implementada en el paquete excepciones) excepciones).

18

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

18

Solucin 3.8
public class GrupoDePeliculas{ PeliculaEnVenta vPeliculas[]; public void venderPelicula(PeliculaEnVenta aVender) throws PeliculaNoEncontrada{ boolean encontrada = false; int i = 0; while ( (i< vPeliculas.length) && (!encontrada) ) { if (vPeliculas[i].equals(aVender)) encontrada= true; else i++; } if(!encontrada) throw new PeliculaNoEncontrada(No hay + aVender); vPeliculas[i].decrementarCopiasDisponibles(); if (vPeliculas[i].copiasDisponibles == 0) borrarPelicula(vPeliculas[i]); } } Estructuras de Datos y Algoritmos 2008/2009 Tema 3

19

Ejercicio 3.9

Usando genericidad y la clase ArrayList, disear una clase Operaciones que:


Tenga un mtodo genrico que devuelva el elemento mnimo de un ArrayList. y Tenga un mtodo genrico que busque un elemento en un ArrayList y devuelva su posicin (devolver -1 si el elemento no est en el ArrayList). Tenga un mtodo genrico que borre la primera aparicin en el ArrayList de un objeto dado, y que devuelva el objeto eliminado (o null si no se encuentra).

20

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

20

10

Solucin 3.9
import java.util.*; public class Operaciones { public static <T extends Comparable<T>> T minimo(ArrayList <T> v) { T min = v.get(0); for (int i = 1; i < v.size(); i++) if (v.get(i).compareTo(min) < 0) min = v.get(i); return min; } public static <T> int buscar(T x, ArrayList<T> v) { return v.indexOf(x); } public static <T> T borrar(T x, ArrayList<T> v) { int pos = buscar(x, v); if (pos == -1) return null; return v.remove(pos); } } Estructuras de Datos y Algoritmos 2008/2009 Tema 3

21

Ejercicio 3.10

Aade el mtodo insercionDirecta a la clase Operaciones del ejercicio anterior, modificndolo para que permita ordenar un ArrayList (clase ArrayList) genrico en lugar de un array como hemos visto antes)

public static <T extends Comparable <T>> void insercionDirecta(T a[]) { for( int i = 1; i < a.length ; i++ ) { T elemAInsertar = a[i]; int posIns = i ; for(; posIns>0 && elemAInsertar.compareTo(a[posIns-1])<0; posIns--) a[posIns]=a[posIns-1]; a[posIns] [ I ] = elemAInsertar; l AI t }

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

22

11

Solucin 3.10
public static <T extends Comparable<T>> void insercionDirecta(ArrayList <T> a) { for (int i = 1; i < a.size(); i++) { T elemAInsertar = a.get(i); int posIns = i ; for (; posIns > 0 && elemAInsertar.compareTo(a.get(posIns-1)) < 0; posIns--) a.set(posIns, a.get(posIns-1)); a.set(posIns, elemAInsertar); } }

Estructuras de Datos y Algoritmos 2008/2009

Tema 3

23

12

S-ar putea să vă placă și