Skip to content
Snippets Groups Projects

Cola

Merged
ivagonzrequested to merge
cola into develop
7 files
+ 323
39
Compare changes
  • Side-by-side
  • Inline

Files

@@ -11,6 +11,8 @@ import java.util.ArrayList;
*/
public class ColaDeAmigos {
private ArrayList<Persona> cola;
/**
* Constructor que recibe una lista, que simboliza las personas que hay al
* comienzo.
@@ -23,7 +25,28 @@ public class ColaDeAmigos {
* parámetro.
*/
public ColaDeAmigos(ArrayList<Persona> cola) {
// TODO Auto-generated constructor stub
if (cola == null)
throw new IllegalArgumentException("La lista no puede ser nula.");
if (hasElementoNull(cola))
throw new IllegalArgumentException("La cola no puede tener elementos nulos.");
this.cola = cola;
}
/**
* Comprueba si la lista pasada como parámetro tiene algún elemento nulo.
*
* @param lista
* Lista a comprobar si tiene elementos nulos. Debe ser correcta:
* No nula.
* @return true si la lista tiene algún elemento nulo, false en caso
* contrario.
*/
public boolean hasElementoNull(ArrayList<Persona> lista) {
for (int i = 0; i < lista.size(); i++) {
if (lista.get(i) == null)
return true;
}
return false;
}
/**
@@ -31,8 +54,7 @@ public class ColaDeAmigos {
* @return lista que simboliza la cola de la cola de amigos.
*/
public ArrayList<Persona> getCola() {
// TODO Auto-generated method stub
return null;
return cola;
}
/**
@@ -50,8 +72,53 @@ public class ColaDeAmigos {
* parámetro.
*/
public int reservasParaAmigos(int id) {
// TODO Auto-generated method stub
return 0;
if (id < 0)
throw new IllegalArgumentException("El id de la Persona a buscar debe ser positivo.");
if (!containsPersona(id))
throw new IllegalArgumentException("El id pasado debe estar asociado a una Persona de la cola.");
return buscarPersona(id).getMaxAmigos();
}
/**
* Comprobará si dado un id de un Persona, dicha Persona está en la cola.
*
* @param id
* Identificador de la Persona a buscar.
* @return true si el id corresponde a una Persona que está en la cola,
* false en caso contrario.
* @throws IllegalArgumentException
* si se incumple alguna de las condiciones impuestas al
* parámetro.
*/
public boolean containsPersona(int id) {
if (id < 0)
throw new IllegalArgumentException("El id de la Persona a buscar debe ser positivo.");
for (int i = 0; i < getCola().size(); i++) {
if (getCola().get(i).getId() == id)
return true;
}
return false;
}
/**
* Buscará una Persona que tenga asociado el id que se pasa como parámetro.
*
* @param id
* Identificador de la Persona a buscar.Debe ser correcto:
* Positivo.
* @return la Persona con el id asociado, null si no hay ninguna con ese id.
* @throws IllegalArgumentException
* si se incumple alguna de las condiciones impuestas al
* parámetro.
*/
public Persona buscarPersona(int id) {
if (id < 0)
throw new IllegalArgumentException("El id de la Persona a buscar debe ser positivo.");
for (int i = 0; i < getCola().size(); i++) {
if (getCola().get(i).getId() == id)
return getCola().get(i);
}
return null;
}
/**
@@ -63,15 +130,18 @@ public class ColaDeAmigos {
* amigos que puede colar. Debe ser correcto: Positivo y debe
* estar en la cola.
* @return cantidad de amigos que aún puede colar la Persona que coincide
* con el id pasado como parámetro.Debe ser correcto: Positivo y
* debe haber una Persona con ese id en la cola.
* con el id pasado como parámetro.
* @throws IllegalArgumentException
* si se incumple alguna de las condiciones impuestas al
* parámetro.
*/
public int amigosPorColar(int id) {
// TODO Auto-generated method stub
return 0;
if (id < 0)
throw new IllegalArgumentException("El id de la Persona a buscar debe ser positivo.");
if (!containsPersona(id))
throw new IllegalArgumentException("El id pasado debe estar asociado a una Persona de la cola.");
return buscarPersona(id).getAmigosPorColar();
}
/**
@@ -90,26 +160,43 @@ public class ColaDeAmigos {
* parámetro.
*/
public ArrayList<Persona> amigosPorDelante(int id) {
// TODO Auto-generated method stub
return null;
if (id < 0)
throw new IllegalArgumentException("El id de la Persona a buscar debe ser positivo.");
if (!containsPersona(id))
throw new IllegalArgumentException("El id pasado debe estar asociado a una Persona de la cola.");
Persona p = buscarPersona(id);
int indicePersona = getCola().indexOf(p);
int indiceAmigos = indicePersona - (p.getMaxAmigos() - p.getAmigosPorColar());
ArrayList<Persona> amigosEnCola = new ArrayList<Persona>();
for (int i = indiceAmigos; i < indicePersona; i++) {
amigosEnCola.add(getCola().get(i));
}
return amigosEnCola;
}
/**
* @return obtiene la siguiente Persona a atender en la cola según el
* orden(la primera)
* @throws IllegalAccessError
* si no hay gente en la cola.
*/
public Persona getSiguiente() {
// TODO Auto-generated method stub
return null;
if (getCola().isEmpty())
throw new IllegalAccessError("No hay gente en la cola.");
return getCola().get(0);
}
/**
* Atiende a la Persona que está en la primera posición de la cola, es
* decir, la quita.
*
* @throws IllegalAccessError
* si no hay gente en la cola.
*/
public void atender() {
// TODO Auto-generated method stub
if (getCola().isEmpty())
throw new IllegalAccessError("No hay gente en la cola.");
getCola().remove(0);
}
/**
@@ -119,8 +206,8 @@ public class ColaDeAmigos {
*
* @param persona
* Persona que entra en la cola. Debe ser correcta: No null, no
* puede estar ya en la cola y no puede tener el mismo id que una
* Persona que esté ya en la cola.
* puede estar ya en la cola y no puede haber ya una persona en
* la cola con su mismo id..
* @param maxAmigos
* Cantidad máxima de amigos que puede colar this. Debe ser
* correcto: Positivo y menor de 10.
@@ -129,8 +216,16 @@ public class ColaDeAmigos {
* los parámetros.
*/
public void pedirVez(Persona persona, int maxAmigos) {
// TODO Auto-generated method stub
if (persona == null)
throw new IllegalArgumentException("La persona no puede ser null");
if (containsPersona(persona.getId()))
throw new IllegalArgumentException("La persona ya está en la cola o hay alguien con su mismo id.");
if (maxAmigos < 0)
throw new IllegalArgumentException("maxAmigos debe ser positivo.");
if (maxAmigos > 10)
throw new IllegalArgumentException("maxAmigos debe ser menor o igual de 10.");
persona.setMaxAmigos(maxAmigos);
getCola().add(getCola().size(), persona);
}
/**
@@ -147,8 +242,68 @@ public class ColaDeAmigos {
* si se incumple alguna de las condiones puestas al parámetro.
*/
public void colarse(Persona persona) {
// TODO Auto-generated method stub
if (persona == null)
throw new IllegalArgumentException("La persona no puede ser null");
if (containsPersona(persona.getId()))
throw new IllegalArgumentException("La persona ya está en la cola o hay alguien con su mismo id.");
if (!hasAmigo(persona))
throw new IllegalArgumentException("La persona no tiene amigos en la cola.");
if (buscarAmigo(persona) == null)
throw new IllegalArgumentException("No tiene amigos que puedan colarle.");
Persona amigo = buscarAmigo(persona);
int indexOfAmigo = getCola().indexOf(amigo);
getCola().add(indexOfAmigo, persona);
amigo.restarAmigosPorColar();
}
/**
* Comprobará,dada una Persona, si tiene a un amigo en la cola. Esto se
* cumple si la relación entre la Persona y su amigo es recíproca.
*
* @param persona
* Persona a mirar si tiene amigos en la cola. Debe ser
* correcta:no nula.
* @return true si tiene algún amigo, false en caso contrario.
* @throws IllegalArgumentException
* si se incumple alguna de las condiciones impuestas al
* parámetro.
*/
public boolean hasAmigo(Persona persona) {
if (persona == null)
throw new IllegalArgumentException("La persona no puede ser nula");
Persona actual = null;
for (int i = 0; i < getCola().size(); i++) {
actual = getCola().get(i);
if (actual.getAmigos().contains(persona) && persona.getAmigos().contains(actual))
return true;
}
return false;
}
/**
* Dada una persona, obtiene a un amigo que haya en la cola.
*
* @param persona
* Persona a obtener su amigo de la cola.Debe ser correcta:No
* nula y debe tener amigo en la cola.
* @return el primer amigo de la persona.
* @throw IllegalArgumentException si se incumple alguna de las condiciones
* impuetas al parámetro.
*/
public Persona buscarAmigo(Persona persona) {
if (persona == null)
throw new IllegalArgumentException("La persona no puede ser nula");
if (!hasAmigo(persona))
throw new IllegalArgumentException("La persona no tiene amigos en la cola.");
Persona actual = null;
for (int i = 0; i < getCola().size(); i++) {
actual = getCola().get(i);
if (actual.getAmigos().contains(persona) && persona.getAmigos().contains(actual)
&& actual.getAmigosPorColar() > 0 && actual.getMaxAmigos() > 0)
return actual;
}
return null;
}
}
Loading