Skip to content
Snippets Groups Projects
Commit ae3c1939 authored by Javier Calvo's avatar Javier Calvo
Browse files

Puerto y Muelle echo. Solo falta la gesgtion de las plazas llenas,

semillenas y vacias
parent b215690a
No related branches found
No related tags found
No related merge requests found
/** /**
* Copyright UVa 2024/2025 * Copyright UVa 2024/2025
*/ */
package es.markse; package es.markse;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import es.uva.inf.poo.maps.GPSCoordinate; import es.uva.inf.poo.maps.GPSCoordinate;
/** /**
* Implementacion de la clase muelle donde se alojaran los Contenedores (Clase) * Implementacion de la clase muelle donde se alojaran los Contenedores (Clase)
* @author javcalv * @author javcalv
...@@ -14,7 +12,8 @@ import es.uva.inf.poo.maps.GPSCoordinate; ...@@ -14,7 +12,8 @@ import es.uva.inf.poo.maps.GPSCoordinate;
*/ */
public class Muelle { public class Muelle {
private Contenedor[][] contenedores; private Plaza[] plazas;
private int altura;
private int identificador; private int identificador;
private boolean operativo; private boolean operativo;
private GPSCoordinate cord; private GPSCoordinate cord;
...@@ -28,10 +27,8 @@ public class Muelle { ...@@ -28,10 +27,8 @@ public class Muelle {
* @param cord Punto GPS que lo localiza. Clase GPSCoordinate. * @param cord Punto GPS que lo localiza. Clase GPSCoordinate.
* @param operativo Estado del muelle. * @param operativo Estado del muelle.
* @param plazas Numero de plazas totales que tiene el Muelle * @param plazas Numero de plazas totales que tiene el Muelle
* @param contenedoresApilables numero maximo de contenedores que se pueden apilar encima de otro * @param altura numero maximo de contenedores que se pueden apilar encima de otro
*/ */
//QUEDA LO DEL NIVEL EN PLAZA, HAY QUE VER COMO LO PONEMOS Y PROGRAMAMOS
public Muelle (int identificador, GPSCoordinate cord, boolean operativo, int plazas, int altura) { public Muelle (int identificador, GPSCoordinate cord, boolean operativo, int plazas, int altura) {
if(String.valueOf(identificador).length() != 2) { if(String.valueOf(identificador).length() != 2) {
throw new IllegalArgumentException("Formato incorrecto. Debe ser un entero de 2 digitos"); throw new IllegalArgumentException("Formato incorrecto. Debe ser un entero de 2 digitos");
...@@ -39,8 +36,9 @@ public class Muelle { ...@@ -39,8 +36,9 @@ public class Muelle {
this.identificador = identificador; this.identificador = identificador;
this.cord=cord; this.cord=cord;
this.operativo=operativo; this.operativo=operativo;
this.contenedores = new Contenedor[plazas][altura]; this.plazas = new Plaza[plazas];
this.plazasVacias = plazas; this.plazasVacias = plazas;
this.altura = altura;
} }
/** /**
...@@ -73,7 +71,7 @@ public class Muelle { ...@@ -73,7 +71,7 @@ public class Muelle {
* @return numero de plazas (totales) del muelle * @return numero de plazas (totales) del muelle
*/ */
public int numeroDePlazasTotales() { public int numeroDePlazasTotales() {
return this.contenedores.length; return this.plazas.length;
} }
/** /**
...@@ -108,17 +106,14 @@ public class Muelle { ...@@ -108,17 +106,14 @@ public class Muelle {
* 1.1.9 Metodo que devuelve la plaza de un contenedor dentro del muelle. * 1.1.9 Metodo que devuelve la plaza de un contenedor dentro del muelle.
* Las plazas van en orden, del 1 hasta la ultima plaza del muelle disponible * Las plazas van en orden, del 1 hasta la ultima plaza del muelle disponible
* @param codigo: codigo del contenedor para ver su plaza actual * @param codigo: codigo del contenedor para ver su plaza actual
* @return la plaza del contenedor * @return la plaza del contenedor o -1 si no se encuentra en ninguna plaza
*/ */
public int plazaActual(String codigo) { public int plazaActual(String codigo) {
for (int i = 0; i < contenedores.length; i++) { for (int i = 0; i < this.plazas.length; i++) {
for (int j = 0; j < contenedores[i].length; j++) { if (this.plazas[i] != null && this.plazas[i].contieneContenedor(codigo)) {
if (contenedores[i][j] != null && contenedores[i][j].getCodigo().equals(codigo)) {
return i; return i;
} }
} }
}
return -1; return -1;
} }
...@@ -127,15 +122,50 @@ public class Muelle { ...@@ -127,15 +122,50 @@ public class Muelle {
* 1.1.10 Metodo que devuelve el nivel de la plaza en la que se encuentra un contenedor. * 1.1.10 Metodo que devuelve el nivel de la plaza en la que se encuentra un contenedor.
* El valor varia entre 1 y el numero máximo de contenedores que se pueden apilar (diferente en cada muelle) * El valor varia entre 1 y el numero máximo de contenedores que se pueden apilar (diferente en cada muelle)
* @param codigo: codigo del contenedor que queremos buscar su nivel * @param codigo: codigo del contenedor que queremos buscar su nivel
* @return el nivel en el que se encuentra el contenedor * @return el nivel en el que se encuentra el contenedor o -1 si no se encuentra
*/ */
//HAY QUE VER QUE ES LO MEJOR Y MEJOR RENDIMIENTO TIENE PARA LOS
public int nivelEnPlaza(String codigo) { public int nivelEnPlaza(String codigo) {
for (Plaza plaza : this.plazas) {
if (plaza != null && plaza.contieneContenedor(codigo)) {
return plaza.nivelContenedor(codigo);
}
} }
return -1;
}
/**
* 1.1.11 Metodo para colocar un contenedor en una plaza y apilarlo si es posible
* @param codigo Codigo del contenedor que queremos colocar
* @param plaza La plaza del contenedor
* @return true si lo ha colocado. False si no, ya que puede ser que la plaza este llena, el contenedor ya este colocado
* en otra plaza, o que el no tenga techo el ultimo
*/
public boolean colocarContenedorEnPlaza(Contenedor contenedor, int plaza) {
//Si el contenedor ya esta dentro, o la plaza esta fuera del rango de plazas devuelve false
if (this.plazaActual(contenedor.getCodigo()) != -1 || plaza<0 || plaza>this.plazas.length) {
return false;
}
//Aqui devolvera true si se coloca o false si no (Esta lleno o el ultimo no tiene techo
else {
return this.plazas[plaza].colocarContenedor(contenedor);
}
}
public boolean colocarContenedorEnPlaza(String codigo, int plaza) { /**
//LUEGO SE HACE * 1.1.12 Metodo que sirve para sacar un contenedor de una Plaza y desapilarlo si es posible
* @param contenedor: Contenedor a desapilar de la plaza
* @return True si lo ha despilado, o false si no, ya que ese contenedor o no está en el muelle, o no se encuentra en la
* ultima posicio apilada para poder sacarlo
*/
public boolean sacarContenedorDePlaza(Contenedor contenedor) {
for (Plaza plaza : this.plazas) {
if (plaza != null && plaza.estaEnUltimoNivel(contenedor.getCodigo())) {
plaza.desapilarContenedor()
return true;
}
} }
return false;
}
} }
\ No newline at end of file
/**
* 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
*/
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 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 < contenedores.size(); i++) {
if (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;
}
// Si está vacío o el último contenedor tiene techo, coloca el contenedor
if (this.contenedores.isEmpty() || this.contenedores.get(this.contenedores.size() - 1).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.contenedores.get(this.contenedores.size() - 1).getCodigo().equals(codigoContenedor);
}
/**
* Metodo que desapila el contendor
*/
public void desapilarContenedor() {
contenedores.remove(contenedores.size() - 1);
}
}
...@@ -37,7 +37,8 @@ public class UsaMuelle { ...@@ -37,7 +37,8 @@ public class UsaMuelle {
//Asignar un contenedor a una plaza y apilarlo encima de otro si es posible //Asignar un contenedor a una plaza y apilarlo encima de otro si es posible
int plazaElegida = 10; int plazaElegida = 10;
boolean colocar = m.colocarContenedorEnPlaza(codigo, plazaElegida); boolean colocar = m.colocarContenedorEnPlaza(c, plazaElegida);
boolean sacar = m.sacarContenedorDePlaza(c);
} }
} }
...@@ -26,7 +26,7 @@ public class UsaPuerto { ...@@ -26,7 +26,7 @@ public class UsaPuerto {
//APARTADO DE PUERTO //APARTADO DE PUERTO
GPSCoordinate cord = new GPSCoordinate(0d, 0d); GPSCoordinate cord = new GPSCoordinate(0d, 0d);
Muelle m = new Muelle(01, cord , true, 20, 3); Muelle m = new Muelle(01, cord , true, 20, 3);
Puerto p = new Puerto("ES-VAL"); Puerto p = new Puerto("ES", "VAL");
//Añadir muelle //Añadir muelle
p.anyadirMuelle(m); p.anyadirMuelle(m);
...@@ -54,6 +54,7 @@ public class UsaPuerto { ...@@ -54,6 +54,7 @@ public class UsaPuerto {
//TRAYECTO //TRAYECTO
/**
Trayecto t = new Trayecto(); Trayecto t = new Trayecto();
LocalDate fechaDada = LocalDate.of(2024, 10, 10); LocalDate fechaDada = LocalDate.of(2024, 10, 10);
t.esFechaSuperior(fechaDada)? t.esFechaSuperior(fechaDada)?
...@@ -63,6 +64,7 @@ public class UsaPuerto { ...@@ -63,6 +64,7 @@ public class UsaPuerto {
else { else {
System.out.println("No"); System.out.println("No");
} }
*/
} }
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment