12
1 Tema 3 Tema 3 EJERCICIOS Conceptos de Java para Estructuras de Datos Genericidad Estr ucturas de Dat os y Algoritmos  2008/2009 Tema 3 1 Utilizando la clase A rrayLi st , escribe un p rograma (e.g. un m ai n dentro de una clase Test C aj a) que realice los siguientes pasos: Ejercicio 3.1 1. Construir un Arra yList con 10 Cajas de Enteros (Integer) con los primeros 10 números impares; 2. Recorrer el Arra yList para mostrar sus datos p or pantalla Estr ucturas de Dat os y Algo rit mos  2008/2009 Tema 3 2

Ejercicios-ArrayList

Embed Size (px)

Citation preview

  • 1Tema 3Tema 3

    EJERCICIOS

    Conceptos de Java para Estructuras de DatosGenericidad

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 1

    Utilizando la clase ArrayList, escribe un programa (e.g. un maindentro de una clase TestCaja) que realice los siguientes pasos:

    Ejercicio 3.1

    1. Construir un ArrayList con 10 Cajas de Enteros (Integer) con los primeros 10 nmeros impares;

    2. Recorrer el ArrayList para mostrar sus datos por pantalla

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 2

  • 2import java.util.*; public class TestCaja { public static void main(String args[]) { // crear el vectorArrayList v = new ArrayList(10);

    Solucin 3.1

    // aadir 10 cajasfor (int i=0; i

  • 3Solucin 3.2public void guardarVehiculo(V v, int plaza) {

    if ((plaza >= 0) && (plaza < numPlazas))plazas.add(plaza, v);

    } Casting para prevenir un cannotresolve symbol - numPlazas

    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();

    resolve symbol numPlazaserror del compilador

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 5

    else cuota 2 v.potencia();}

    }return cuota;

    }

    Reescribe la clase Caja para exigir que Su contenido slo pueda ser numrico (es decir, una clase

    derivada de la clase Number)

    Ejercicio 3.3

    derivada de la clase 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 6

  • 4Solucin 3.3public class Caja {private T dato; public Caja(){public Caja(){super();

    } public T getDato(){ return dato;

    } public void setDato (T d){ dato = d;

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 7

    }public int valorEntero() {return dato.intValue();

    }}

    Se pide disear una clase Genrica CajaPeso que extiendaCaja para aadirle el atributo peso y as poder saber si unaCaja pesa ms que otra dada; se considerar adems que dos

    Ejercicio 3.4

    j p q ; qCajas son iguales sii sus pesos son los mismos

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 88

  • 5public class CajaPeso extends Caja implements Comparable{

    private int peso;

    Solucin 3.4

    public CajaPeso(){ super(); peso = 0; }public int getPeso(){ return peso; }public void setPeso(int p){ peso=p; }

    public int compareTo(CajaPeso cP) {if (peso < cP.getPeso() ) return -1;else if (peso > cP.getPeso()) return +1;

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 9

    else return 0; }

    }

    9

    Qu lneas producen error?1. Figura f1 = new Circulo();2. Figura f2 = new Cuadrado();

    Ejercicio 3.5

    2. Figura f2 new Cuadrado();3. System.out.println(f1.compareTo(f2));4. Object x = f1;5. System.out.println(x.compareTo(f1));6. System.out.println( (Comparable) x.compareTo(f1));7. System.out.println( ((Comparable) x).compareTo(f1));8. System.out.println( ((Figura) x).compareTo(f1));

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 10

    9. System.out.println( f2.compareTo(x) );

    10

  • 6Qu lneas producen error?1. Figura f1 = new Circulo();2. Figura f2 = new Cuadrado();

    Solucin 3.5

    2. Figura f2 new Cuadrado();3. System.out.println(f1.compareTo(f2));4. Object x = f1;5. System.out.println(x.compareTo(f1));

    Cannot find symbol - method compareTo(Figura)6. System.out.println( (Comparable) x.compareTo(f1));

    Cannot find symbol - method compareTo(Figura)

    S t t i tl ( ((C bl ) ) T (f1))

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 11

    7. System.out.println( ((Comparable) x).compareTo(f1));8. System.out.println( ((Figura) x).compareTo(f1));9. System.out.println( f2.compareTo(x) );

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

    11

    Dada la siguiente clase Java:

    public class PeliculaEnDvd {protected String titulo;

    Ejercicio 3.6 (1/2)

    protected String director;protected int anyo;public PeliculaEnDvd(String t, String d, int a) {

    this.titulo = t;this.director = d;this.anyo = a;

    }

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 12

    public String toString () {return "Titulo:" + titulo +

    "Director:" + director + Ao:" + anyo;}

    12

  • 7Disear la clase Java PeliculaEnVenta que representa cualquier pelcula disponible para la venta.1. Adems del ttulo, director y ao una PeliculaEnVenta disponga informacin

    sobre:

    Ejercicio 3.6 (2/2)

    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.

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 13

    2. Se desea poder consultar el nmero de copias disponibles para su venta.

    3. Se desea poder decrementar el nmero de copias disponibles para su venta.

    13

    public class PeliculaEnVenta extends PeliculaEnDvd implements Comparable

    {protected double precio;

    t t d i t i Di ibl

    Solucin 3.6 (1/2)

    protected int copiasDisponibles;

    public PeliculaEnVenta(String t, String d, int a, double p, int c) {super(t, d, a);this.precio = p;this.copiasDisponibles = c;

    }

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 14

    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

  • 8public boolean equals(Object x){

    return ( this.compareTo((PeliculaEnVenta) x) == 0 ) ;

    Solucin 3.6 (2/2)

    }

    public int copiasDisponibles(){return this.copiasDisponibles;

    }

    public void decrementarCopiasDisponibles(){

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 15

    this.copiasDisponibles--;}

    } //Fin de la clase PeliculaEnVenta

    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

    Ejercicio 3.7

    pelculas disponibles. La ordenacin se realizar utilizando: el mtodo esttico insercionDirecta(T a[]); de la clase Ordenacion, en el paquete ordenacionArray:

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 1616

  • 9public class GrupoDePeliculas{PeliculaEnVenta vPeliculas[];

    public GrupoDePeliculas(int talla){

    Solucin 3.7

    vPeliculas = new PeliculaEnVenta[talla];}

    public String toString(){Ordenacion.insercionDirecta(vPeliculas);for ( int i = 0 ; i < vPeliculas.length ; i++)

    PeliculaEnVenta implementaComparabley sobreescribe compareTo

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 17

    System.out.println(vPeliculas[i])}

    }

    Dentro de la clase GrupoDePeliculas, disea el mtodo

    void vender(PeliculaEnVenta aVender) throws PeliculaNoEncontrada.

    Ejercicio 3.8

    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)

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 18

    excepciones).

    18

  • 10

    public class GrupoDePeliculas{PeliculaEnVenta vPeliculas[];public void venderPelicula(PeliculaEnVenta aVender) throws

    PeliculaNoEncontrada{

    Solucin 3.8

    boolean encontrada = false;int i = 0;while ( (i< vPeliculas.length) && (!encontrada) ) {

    if (vPeliculas[i].equals(aVender)) encontrada= true;

    else i++;}if(!encontrada)

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 19

    if(!encontrada)throw new PeliculaNoEncontrada(No hay + aVender);

    vPeliculas[i].decrementarCopiasDisponibles();if (vPeliculas[i].copiasDisponibles == 0)

    borrarPelicula(vPeliculas[i]);}

    }

    Usando genericidad y la clase ArrayList, disear una clase Operaciones que: Tenga un mtodo genrico que devuelva el elemento mnimo de un

    ArrayList.

    Ejercicio 3.9

    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).

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 2020

  • 11

    import java.util.*; public class Operaciones {

    public static T minimo(ArrayList v) { T min = v.get(0); for (int i = 1; i < v.size(); i++)

    Solucin 3.9

    if (v.get(i).compareTo(min) < 0) min = v.get(i);

    return min; } public static int buscar(T x, ArrayList v) {

    return v.indexOf(x); } public static T borrar(T x, ArrayList v) {

    Estructuras de Datos y Algoritmos 2008/2009 Tema 3 21

    public static T borrar(T x, ArrayList v) { int pos = buscar(x, v); if (pos == -1) return null; return v.remove(pos);

    } }

    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)

    Ejercicio 3.10

    public static 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])

  • 12

    public static voidinsercionDirecta(ArrayList a) {

    Solucin 3.10

    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