我对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);
}
然后,您可以拨打Kiosk
:p.addMeToFlight();
。