如何在机舱内只存放多名乘客class?

How to store only multiple passengers inside the cabin class?

我的程序中有三个 classes。 Ship.javaCabin.javaPassenger.java。根据计划,一个舱室最多只能容纳 3 名乘客。但我坚持如何做到这一点。我在 Ship.java class 中创建了一个舱室对象数组。我只能使用下面提到的 addCustomer 方法

将一名乘客添加到机舱
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() );
    }
}

这就是 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;
    }
}

这就是 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;
    }
}

Cabin 应该包含一个 data-structure 来容纳乘客。(关联 1-n,来自 1_cabin-N_passengers)你也可以限制 no.关于客舱类型的乘客(最多 2-3-n 名乘客),并检查在特定时间不要在同一客舱中添加 n-times 同一乘客。与具有 Cabins.

Ship 相同的逻辑
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(...)); 

小心不要混淆语义,想想现实世界中的事情是如何运作的(见@Jim Garrison)。

注意:也许 Map<String/Integer,CustomObject> 可以很好地适应基于密钥(id)的访问。

根据您的代码,您的关系变为 1 Cabin have multiple Passager,因此关系为 OneToMany。解决您的问题的最好和最简单的方法是 java 中的 Composition。您正在与 Inheritance 合作,它有 IS-A 关系,但 CompostionHAS-A 关系。作文最适合处理关系。

下面是使用“组合技术”解决您的问题的代码:

Passenger.java

public class Passenger {
    String firstName;
    String surName;
    int expenses;

    // No argument constructor
    public Passenger() {
        
    }
    
    // All argument constructor
    public Passenger(String firstName, String surName, int expenses) {
        this.firstName = firstName;
        this.surName = surName;
        this.expenses = 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;
    }
}

Cabin.java

public class Cabin {

    int cabinNumber;
    String cabinName;
    
    List<Passenger> passenger = new ArrayList<>();
    
    // No argument constructor
    public Cabin() {
        
    }
    
    // All argument constructor
    public Cabin(int cabinNumber, String cabinName, List<Passenger> passenger) {
        this.cabinNumber = cabinNumber;
        this.cabinName = cabinName;
        this.passenger = passenger;
    }
    
    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;
    }
    
    public List<Passenger> getPassenger() {
        return passenger;
    }
    
    public void setPassenger(List<Passenger> passenger) {
        this.passenger = passenger;
    }
}

下面是Mainclass插入记录在PassangerCabin有关系

public static void main (String[] args) {
        Cabin cabin = new Cabin();
        
        // Insert and Put all Passanger in ArrayList
        List<Passenger> passenger = new ArrayList<>();
        passenger.add(new Passenger("Jack", "Crawly", 1000));
        passenger.add(new Passenger("Michel", "Jordan", 2000));
        passenger.add(new Passenger("Tim", "Leach", 3000));
        
        if(cabin.getCabinName() == null)
        {
            // Insert Cabin with all Passenger
            cabin = new Cabin(1, "Cabin1", passenger);   
        }
        
        // Get all Passangers with Cabin
        List<Passenger> passengers = cabin.getPassenger();   
        for (Passenger psg : passengers) {
            System.out.println("Cabin Number : " + cabin.getCabinNumber());
            System.out.println("FirstName : " + psg.getFirstName());
            System.out.println("LastName : " + psg.getSurName());
            System.out.println();
        }   
}