diff --git a/src/es/markse/Muelle.java b/src/es/markse/Muelle.java index 20c01e4ac5229df07d063818d0b68cf6461c7d46..5ab892942979d17efc1e3a2495070ea74598d43b 100644 --- a/src/es/markse/Muelle.java +++ b/src/es/markse/Muelle.java @@ -3,6 +3,9 @@ * Copyright UVa 2024/2025 */ package es.markse; +import java.util.ArrayList; +import java.util.List; + import es.uva.inf.poo.maps.GPSCoordinate; /** @@ -19,6 +22,104 @@ public class Muelle { private int plazasLlenas = 0; private int plazasSemillenas = 0; + private static class Plaza { + private int altura; + private List<Contenedor> contenedores = new ArrayList<>(); + + /** + * Constructor del objeto Plaza + * @param altura. Altura maxima apilable de los contenedores + */ + public Plaza(int altura){ + this.altura = altura; + } + + /** + * Metodo que indica si un contenedor se encuentra en la plaza o no + * @param codigo Codigo del contenedor que queremos buscar + * @return true si contiene ese contenedor en la Plaza o false si no lo tiene + */ + public boolean contieneContenedor(String codigo) { + return this.contenedores.stream().anyMatch(c -> c.getCodigo().equals(codigo)); + } + + /** + * Metodo que indica el nivel que tiene un contenedor, dado un codigo. + * @param codigo Codigo del contenedo que queremos ver su plaza + * @return la altura en la que se encuentra (del 1 que es la baja ahasta n, que es el máximo de contenedores apilabres) + */ + public int nivelContenedor(String codigo) { + for (int i = 0; i < this.contenedores.size(); i++) { + if (this.contenedores.get(i).getCodigo().equals(codigo)) { + return i + 1; + } + } + return -1; + } + + + /** + *Metodo que sirve para colar el contenedor en una plaza (apilarlo si esppsible) + * @param codigo: Codigo del contenedor + * @return true si se ha colodado, o false si no, ya que la plaza esta llena o el ultimo contenedor de esa plaza + * no tiene techo + */ + public boolean colocarContenedor(Contenedor contenedor) { + if (this.contenedores.size() >= this.altura) { + return false; + } + if (this.contenedores.isEmpty() || this.ultimoContenedor().tieneTecho()) { + this.contenedores.add(contenedor); + return true; + } + return false; + } + + /** + * Metodo que devuelve true o false si el contenedor que introducimos se encuentra en el nivel mas alto actual de la plaza, es decir, que + * es el ultimo contenedor apilado en esa plaza (sin necesidad que sea el maximo) + * @param codigoContenedor Codigo del contenedor que se comprueba si es el ultimo + * @return true si es el ultimo o false si no lo es. + */ + public boolean estaEnUltimoNivel(String codigoContenedor) { + return !this.contenedores.isEmpty() && this.ultimoContenedor().getCodigo().equals(codigoContenedor); + } + + /** + * Metodo que desapila el contendor + */ + public void desapilarContenedor() { + this.contenedores.remove(contenedores.size() - 1); + } + + /** + * Metod que devuelve el ultimo contenedor de la Plaza + * @return ultimo contenedor de la plaza o null si esta vacio + */ + public Contenedor ultimoContenedor() { + if (contenedores.isEmpty()) { + return null; + } + return contenedores.get(contenedores.size() -1); + } + + /** + * Metodo que devuelve el numero decontenedores + * @return numero de contenedores + */ + public int numeroContenedores() { + return contenedores.size(); + } + + /** + * Metodo que devuelve la altura maxima de la plaza + * @return altura + */ + public int altura() { + return this.altura; + } + } + /** * Constructor del objeto Muelle * @param identificador Identificador de 2 digitos (numeros) @@ -129,7 +230,7 @@ public class Muelle { */ public int plazaActual(String codigo) { for (int i = 0; i < this.plazas.length; i++) { - if (this.plazas[i] != null && this.plazas[i].contieneContenedor(codigo)) { + if (this.plazas[i].numeroContenedores() != 0 && this.plazas[i].contieneContenedor(codigo)) { return i; } } @@ -144,7 +245,7 @@ public class Muelle { */ public int nivelEnPlaza(String codigo) { for (Plaza plaza : this.plazas) { - if (plaza != null && plaza.contieneContenedor(codigo)) { + if (plaza.numeroContenedores() != 0 && plaza.contieneContenedor(codigo)) { return plaza.nivelContenedor(codigo); } } @@ -181,7 +282,7 @@ public class Muelle { public void sacarContenedorDePlaza(Contenedor contenedor) { for (Plaza plaza : this.plazas) { - if (plaza != null && plaza.estaEnUltimoNivel(contenedor.getCodigo())) { + if (plaza.numeroContenedores() != 0 && plaza.estaEnUltimoNivel(contenedor.getCodigo())) { int plazasAntes = plaza.numeroContenedores(); boolean teniaTecho = plaza.ultimoContenedor().tieneTecho(); //Ver si el contenedor que quitamos tenia techo o no plaza.desapilarContenedor(); @@ -219,7 +320,7 @@ public class Muelle { } /** - * Metodo para alternar techo (Test) + * Metodo para alternar si esta operativo o no (Test) */ public void alternarOperativo() { this.operativo = !this.operativo; diff --git a/src/es/markse/Plaza.java b/src/es/markse/Plaza.java deleted file mode 100644 index a6b478cdbf0b43c1165c7c6207b196c964699e3d..0000000000000000000000000000000000000000 --- a/src/es/markse/Plaza.java +++ /dev/null @@ -1,113 +0,0 @@ - -/** - * Copyright Universidad de Valladolid 2024 - */ - -package es.markse; -import java.util.ArrayList; -import java.util.List; - -/** - * Implementacion de la clase Plaza - * @author javcalv - * @author victorm - * - */ -public class Plaza { - private int altura; - private List<Contenedor> contenedores = new ArrayList<>(); - - /** - * Constructor del objeto Plaza - * @param altura. Altura maxima apilable de los contenedores - */ - //Ya se compara en el Muelle la altura - public Plaza(int altura){ - this.altura = altura; - } - - /** - * Metodo que indica si un contenedor se encuentra en la plaza o no - * @param codigo Codigo del contenedor que queremos buscar - * @return true si contiene ese contenedor en la Plaza o false si no lo tiene - */ - public boolean contieneContenedor(String codigo) { - return this.contenedores.stream().anyMatch(c -> c.getCodigo().equals(codigo)); - } - - /** - * Metodo que indica el nivel que tiene un contenedor, dado un codigo. - * @param codigo Codigo del contenedo que queremos ver su plaza - * @return la altura en la que se encuentra (del 1 que es la baja ahasta n, que es el máximo de contenedores apilabres) - */ - public int nivelContenedor(String codigo) { - for (int i = 0; i < this.contenedores.size(); i++) { - if (this.contenedores.get(i).getCodigo().equals(codigo)) { - return i + 1; - } - } - return -1; - } - - - /** - *Metodo que sirve para colar el contenedor en una plaza (apilarlo si esppsible) - * @param codigo: Codigo del contenedor - * @return true si se ha colodado, o false si no, ya que la plaza esta llena o el ultimo contenedor de esa plaza - * no tiene techo - */ - public boolean colocarContenedor(Contenedor contenedor) { - if (this.contenedores.size() >= this.altura) { - return false; - } - if (this.contenedores.isEmpty() || this.ultimoContenedor().tieneTecho()) { - this.contenedores.add(contenedor); - return true; - } - return false; - } - - /** - * Metodo que devuelve true o false si el contenedor que introducimos se encuentra en el nivel mas alto actual de la plaza, es decir, que - * es el ultimo contenedor apilado en esa plaza (sin necesidad que sea el maximo) - * @param codigoContenedor Codigo del contenedor que se comprueba si es el ultimo - * @return true si es el ultimo o false si no lo es. - */ - public boolean estaEnUltimoNivel(String codigoContenedor) { - return !this.contenedores.isEmpty() && this.ultimoContenedor().getCodigo().equals(codigoContenedor); - } - - /** - * Metodo que desapila el contendor - */ - public void desapilarContenedor() { - this.contenedores.remove(contenedores.size() - 1); - } - - /** - * Metod que devuelve el ultimo contenedor de la Plaza - * @return ultimo contenedor de la plaza o null si esta vacio - */ - public Contenedor ultimoContenedor() { - if (contenedores.isEmpty()) { - return null; - } - return contenedores.get(contenedores.size() -1); - } - - /** - * Metodo que devuelve el numero decontenedores - * @return numero de contenedores - */ - public int numeroContenedores() { - return contenedores.size(); - } - - /** - * Metodo que devuelve la altura maxima de la plaza - * @return altura - */ - public int altura() { - return this.altura; - } -} \ No newline at end of file