Vamos a crear las siguientes clases:
Televisor
Propiedades:
String modelo
int pulgadas
int peso
Ordenador
Propiedades
String nombre
int ram
int hdd
String placa
Lavavajillas
String marca
int capacidad
Todas las propiedades privadas con getters y setters. COnstructores con todas las propiedades.
No está de más crear una sobrecarga del toString.
Crearemos también el interfaz Paqueteria que tiene los siguientes métodos:
int getPeso()
int getDiagonal()
Las tres clases anteriores DEBEN implementar los métodos.
En el caso del televisor el peso que tiene en la propiedad peso. La diagonal son las pulgadas*5
En el caso del ordenador el peso es 500 y la diagonal 70
En el caso del lavavajilas el peso es 200* capacidad y la diagonal la capacidad/.7
Cread un main para probar que todo funcione.
Nuestra empresa se dedica a almacenar objetos de todo tipo y se organizan en palés. Vamos a crear una clase Pale que tiene como propiedades:
int capacidad
int lado
List<Paqueteria>
El constructor está sobrecargado, podemos tenerlo pasando las propiedades capacidad y lado, en cuyo caso se agina el valor que nos están pasando, o podemos tenerlo sin parámetros, en cuyo caso la capacidad es de 2000 y el lado es de 500.
Tendrá un método addPaquete(Paqueteria paquete) que nos añade un paquete al arrayList
Tendrá un método eliminarMasPesados(int peso) que nos elimine los elementos del arrayList que sean más pesados que el peso que se le pasa como parámetro.
Tendrá un método totalPeso que nos diga el total de los pesos de los componentes del arraylist
Y un método totalAncho que nos devolverá la suma de las diagonales de los componentes del arrayList
Una vez tengamos esto en addPaquete tendremos que comprobar que el elemento que añadimos no hace que el total del peso sea mayor que la capacidad, no que el total del ancho sea mayor que el lado.
Por último crear un método fueraTelevisores() que nos elimine del arraylist todos los televisores.
Vamos a crear la clase Almacen que tiene como propiedades
Un array de 20 pales
Un arrayList de Paqueteria
En el contructor inicializamos el array con los 20 pales sin parámetros y el arraylist.
Tenemos un método addPaquete que nos añade el paquete a la paquetería.
Y un método llenarPales que nos va cogiendo los elementos que hay en el arraylist y metiéndolos en los palés hasta su capacidad. Cuando llenamos uno, pasamos al siguiente.
package com.trifulcas.preexamen; public class Televisor implements Paqueteria { private String modelo; private int pulgadas; private int peso; public Televisor(String modelo, int pulgadas, int peso) { super(); this.modelo = modelo; this.pulgadas = pulgadas; this.peso = peso; } /** * @return the modelo */ public String getModelo() { return modelo; } /** * @param modelo the modelo to set */ public void setModelo(String modelo) { this.modelo = modelo; } /** * @return the pulgadas */ public int getPulgadas() { return pulgadas; } /** * @param pulgadas the pulgadas to set */ public void setPulgadas(int pulgadas) { this.pulgadas = pulgadas; } /** * @return the peso */ public int getPeso() { return peso; } /** * @param peso the peso to set */ public void setPeso(int peso) { this.peso = peso; } @Override public String toString() { return "Televisor [modelo=" + modelo + ", pulgadas=" + pulgadas + ", peso=" + peso + "]"; } @Override public int getDiagonal() { // TODO Auto-generated method stub return getPulgadas()*5; } }
package com.trifulcas.preexamen; public class Ordenador implements Paqueteria{ private String nombre; private int ram; private int hdd; private String placa; public Ordenador(String nombre, int ram, int hdd, String placa) { super(); this.nombre = nombre; this.ram = ram; this.hdd = hdd; this.placa = placa; } /** * @return the nombre */ public String getNombre() { return nombre; } /** * @param nombre the nombre to set */ public void setNombre(String nombre) { this.nombre = nombre; } /** * @return the ram */ public int getRam() { return ram; } /** * @param ram the ram to set */ public void setRam(int ram) { this.ram = ram; } /** * @return the hdd */ public int getHdd() { return hdd; } /** * @param hdd the hdd to set */ public void setHdd(int hdd) { this.hdd = hdd; } /** * @return the placa */ public String getPlaca() { return placa; } /** * @param placa the placa to set */ public void setPlaca(String placa) { this.placa = placa; } @Override public String toString() { return "Ordenador [nombre=" + nombre + ", ram=" + ram + ", hdd=" + hdd + ", placa=" + placa + "]"; } @Override public int getPeso() { // TODO Auto-generated method stub return 500; } @Override public int getDiagonal() { // TODO Auto-generated method stub return 70; } }
package com.trifulcas.preexamen; public class Lavavajillas implements Paqueteria { private String marca; private int capacidad; public Lavavajillas(String marca, int capacidad) { super(); this.marca = marca; this.capacidad = capacidad; } /** * @return the marca */ public String getMarca() { return marca; } /** * @param marca the marca to set */ public void setMarca(String marca) { this.marca = marca; } /** * @return the capacidad */ public int getCapacidad() { return capacidad; } /** * @param capacidad the capacidad to set */ public void setCapacidad(int capacidad) { this.capacidad = capacidad; } @Override public String toString() { return "Lavavajillas [marca=" + marca + ", capacidad=" + capacidad + "]"; } @Override public int getPeso() { // TODO Auto-generated method stub return 200*getCapacidad(); } @Override public int getDiagonal() { // TODO Auto-generated method stub return (int) (getCapacidad()*.7); } }
package com.trifulcas.preexamen; public interface Paqueteria { int getPeso(); int getDiagonal(); }
package com.trifulcas.preexamen; import java.util.ArrayList; import java.util.List; public class Pale { private int capacidad; private int lado; private List<Paqueteria> paquetes; public Pale(int capacidad, int lado) { super(); this.capacidad = capacidad; this.lado = lado; paquetes = new ArrayList<Paqueteria>(); } public Pale() { this(2000, 500); } public void addPaquete(Paqueteria paquete) { if (cabePaquete(paquete)) { paquetes.add(paquete); } } public void eliminarMasPesados(int peso) { // Voy del final al principio para que no se me 'mueva' el arraylist for (int i = paquetes.size() - 1; i >= 0; i--) { if (paquetes.get(i).getPeso() > peso) { paquetes.remove(i); } } } public int totalPeso() { int res = 0; for (Paqueteria paquete : paquetes) { res += paquete.getPeso(); } return res; } public int totalAncho() { int res = 0; for (Paqueteria paquete : paquetes) { res += paquete.getDiagonal(); } return res; } @Override public String toString() { return "Pale [capacidad=" + capacidad + ", lado=" + lado + ", paquetes=" + paquetes + "]"; } public void fueraTelevisores() { for (int i = paquetes.size() - 1; i >= 0; i--) { if (paquetes.get(i) instanceof Televisor) { paquetes.remove(i); } } } public boolean cabePaquete(Paqueteria paquete) { return totalPeso() + paquete.getPeso() <= capacidad && totalAncho()+paquete.getDiagonal()<=lado; } }
package com.trifulcas.preexamen; import java.util.ArrayList; import java.util.List; public class Almacen { private Pale[] pales; private List<Paqueteria> paquetes; public Almacen() { paquetes = new ArrayList<Paqueteria>(); pales = new Pale[20]; for (int i = 0; i < 20; i++) { pales[i] = new Pale(); } } public void addPaquete(Paqueteria paquete) { paquetes.add(paquete); } public void llenarPales() { for (int i = paquetes.size() - 1; i >= 0; i--) { for (int j = 0; j < 20; j++) { if (pales[j].cabePaquete(paquetes.get(i))) { pales[j].addPaquete(paquetes.get(i)); paquetes.remove(i); break; } } } } }
package com.trifulcas.preexamen; public class TestPreExamen { public static void main(String[] args) { Televisor lg = new Televisor("lg", 40, 100); System.out.println(lg); System.out.println(lg.getDiagonal()); Ordenador dell=new Ordenador("Dell",10,10,"AMD"); System.out.println(dell); Lavavajillas braun=new Lavavajillas("Braun",200); System.out.println(braun); System.out.println(braun.getDiagonal()); System.out.println(braun.getPeso()); Pale pale=new Pale(3000,700); pale.addPaquete(braun); pale.addPaquete(dell); pale.addPaquete(lg); System.out.println(pale); pale.fueraTelevisores(); System.out.println(pale); } }