Tengo tres clases en mi programa. Ship.java , Cabin.java y Passenger.java . De acuerdo con el programa, una sola cabina debe albergar hasta 3 pasajeros únicamente. Pero estoy atascado en cómo hacer esto. He creado una serie de objetos de cabina en mi clase Ship.java . Solo puedo agregar un pasajero a una cabina con el método addCustomer mencionado a continuación
Cabin[] cruiseShip = new Cabin[12]; for (int i = 0; i < cruiseShip.length; i++) { cruiseShip[i] = new Cabin(); } public static void addCustomer(Cabin[] cruiseShip, String firstName, String surName, int expenses, int cabinNumber){ if (cruiseShip[cabinNumber].getCabinName().equals("empty")){ cruiseShip[cabinNumber].setFirstName(firstName); cruiseShip[cabinNumber].setSurName(surName); cruiseShip[cabinNumber].setExpenses(expenses); cruiseShip[cabinNumber].setCabinName("not empty"); System.out.println("Cabin number " + cruiseShip[cabinNumber].getCabinNumber() + " is occupied by " + cruiseShip[cabinNumber].getFirstName() + " " + cruiseShip[cabinNumber].getSurName() ); } } Así es como se ve Cabin.java :
public class Cabin extends Passenger { int cabinNumber; String cabinName; public String getCabinName() { return cabinName; } public void setCabinName(String cabinName) { this.cabinName = cabinName; } public int getCabinNumber() { return cabinNumber; } public void setCabinNumber(int cabinNumber) { this.cabinNumber = cabinNumber; } } Así es como se ve Passenger.java :
public class Passenger { String firstName; String surName; int expenses; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getSurName() { return surName; } public void setSurName(String surName) { this.surName = surName; } public int getExpenses() { return expenses; } public void setExpenses(int expenses) { this.expenses = expenses; } }La Cabin debe contener una estructura de datos que contenga a los pasajeros (asociación 1-n, de 1_cabina-N_pasajeros). También puede restringir el número. de pasajeros con respecto al tipo de cabina (hasta 2-3-n pasajeros) y también verifique no agregar n-veces el mismo pasajero en la misma cabina por un tiempo específico. La misma lógica con el Ship que tiene Cabins .
class Cabin { ... etc ... as u did List<Passenger> listP = new ArrayList<Passenger>(); } listP.add(new Passenger(...)); class Ship { ... List<Cabin> listC = new ArrayList<Cabin>(); } listC.add(new Cabin(...)); //get a specific cabin from the ship and add a new Passenger //note maybe it's better to do your custom methods for add,get_Ship, Cabin (based on the requiremts). //Standard List Methods usually do not fit exactly custom requirements, so need to be enhanced ship.getlistC().get(i_specificCabin).listP.add(new Passenger(...));Tenga cuidado de no mezclar la semántica, piense cómo funcionan las cosas en el mundo real (ver @Jim Garrison).
Nota: Tal vez un Map<String/Integer,CustomObject> pueda encajar bien para facilitar el acceso según la clave (id).