Java 语法方法和类

  • 本文关键字:方法 语法 Java java
  • 更新时间 :
  • 英文 :


我对Java很陌生,对编程也比较陌生。 我有 3 个课程,它们是连接的。

第1类:飞行

public class Flight {
    private int flightNumber;
    Passenger passenger1 = null; // two objects?
    Passenger passenger2 = null;
    private int confirmedPassengers = 0;
    Passenger bagsChecked;
    //private boolean bagsLoaded;

    public Flight(int fn, int cf){
        flightNumber = fn;
        //passenger1 = p1;
        //passenger2 = p2;
        confirmedPassengers = cf;
        //bagsChecked = bc;
    }

        public boolean addPassenger(Passenger p){
            if (confirmedPassengers == 0){
                passenger1= p;
                confirmedPassengers+=1;         
                System.out.println("P1 has been added.");
                return true;
            }   
            if (confirmedPassengers == 1){
                passenger2 = p;
                confirmedPassengers+=1;
                System.out.println("P2 has been added");
                return true;
            }
                else{
                    System.out.println("This passenger was not added because the capacity is full.");
                    return false;
                }
        }
    }

第2类:乘客

public class Passenger {
    private String name;
    Flight flight;
    private int bagsChecked;
    private String confirmationNumber;

    public Passenger(String n, Flight f, int b, String cn){
        name = n;
        flight = f;
        bagsChecked = b;
        confirmationNumber = cn;
    }
    public boolean hasConfirmation(){
        if (confirmationNumber != null) {
            return true;
        }
        else{
            return false;
        }
    }
}

第 3 类:售货亭:

public class Kiosk {
    private int kioskNumber;
    public Kiosk (int k){
        kioskNumber = k;
    }

    public void checkIn(Passenger p){

        if (p.hasConfirmation() == true) {
            addPassenger(p); // trying to add Passenger here
            System.out.println("Passenger " + p.getName() + ""+ "added in at Kiosk1 ");

        }

    }
}

我正在尝试在乘客在Kiosk办理登机手续时为Flight添加Passenger。如何使用Flight中的addPassenger方法将Passenger添加到Kiosk

Kiosk.checkIn()中:

p.flight.addPassenger(p);

一些建议:

当你有一个东西的集合(如passanger1和passanger2)时,你可能想要使用数组或更好的某种形式的集合,如ArrayList

ArrayList<Passanger> passangers = new ArrayList<Passanger>(2);
passangers.add(p);
System.out.println(passangers.size());

此外,公共数据成员也不是很好。在需要的地方创建 setter 和 getter,所以上面的代码看起来像这样(在实现 Passanger.getFlight() 之后:

p.getFlight().addPassenger(p);

您需要在 Kiosk 的某个地方放置一个类 Flight 的实例,否则您将无法调用它的方法,是吗?

使用组合

public class Kiosk { 
private int kioskNumber;
private Flight f;
private Passenger ps;
public Kiosk (int k){
    kioskNumber = k;
}

public void checkIn(Passenger p){

    if (p.hasConfirmation() == true) {
        f.addPassenger(p); // trying to add Passenger here
        System.out.println("Passenger " + p.getName() + ""+ "added in at Kiosk1 ");

    }

}
}

飞行舱导入信息亭,并将该飞行类的实例创建到信息亭中。现在,通过飞行类实例,您可以访问方法addPassanger。jst like Instance_Of_Flight_Class.Method_Name

// add a new method to Passanger class
public Flight getFlight() { return flight; }
// change how you use addPassanger() in Kiosk
if (p.hasConfirmation()) {
    Flight passangersFlight = p.getFlight();
    if (passangersFlight != null) {
        passangersFlight.addPassanger(p);
    }
}
if (p.hasConfirmation() == true) {
    addPassenger(p); // trying to add Passenger here
    System.out.println("Passenger " + p.getName() + ""+ "added in at Kiosk1 ");
}

您的addPassenger(p)方法不是静态的。所以你不能调用它,除非你有一个声明它的类的实例。

Kiosk 类中,将对Flight类的引用声明为实例变量。然后在该实例上调用addPassenger()

private Flight flight = p.getFlight(); // Edited -- new Flight();

你对addPassenger()的呼吁是这样的:-

flight.addPassenger(p);

您需要在类Flight中添加List<Passenger>..这样您就可以维护该航班上所有乘客的列表。并使用上述方法,为flight添加passenger

希望有帮助..

为什么不直接编辑 checkIn(Passenger p) 方法以具有两个参数,因为您的Kiosk看起来像某种控制器类:

checkIn(Passenger p, Flight f) { 
  if (f != null) f.addPassenger(p); 
}

正如其他人所说,您应该避免通过Passenger对象中引用的Flight对象调用addPassenger,因为您不希望Passenger与他自己添加到Flight有任何关系。

你可以,但不应该通过他自己的Flight引用添加Passenger。让Passenger具有以下代码:

public boolean addMeToFlight() {
  return flight.addPassenger(this);
}

然后,您可以拨打Kioskp.addMeToFlight();

最新更新