我是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 ");
}
}
}
当乘客在Passenger
办理登机手续时,我正在尝试向Flight
添加Kiosk
。如何使用addPassenger
中的Flight
方法将Passenger
添加到Kiosk
?
答案 0 :(得分:2)
在Kiosk.checkIn()
:
p.flight.addPassenger(p);
一些建议:
如果你有一组东西(比如passanger1和passanger2),你可能想要使用一个数组或更好的某种形式的collection,如ArrayList
:
ArrayList<Passanger> passangers = new ArrayList<Passanger>(2);
passangers.add(p);
System.out.println(passangers.size());
此外,公共数据成员也不是很好。在你需要的地方创建setter和getter,所以上面的代码看起来应该是这样的(在实现Passanger.getFlight()
之后:
p.getFlight().addPassenger(p);
答案 1 :(得分:0)
你需要在Kiosk的某个地方使用Flight类的实例,否则你将无法调用它的方法,是吗?
答案 2 :(得分:0)
使用合成
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 ");
}
}
}
答案 3 :(得分:0)
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);
您需要在班级List<Passenger>
中添加Flight
。这样您就可以维护该航班中所有乘客的列表。并使用上述方法添加{{1} 1}}到passenger
希望有所帮助..
答案 4 :(得分:0)
将航班类导入Kiosk并将该航班类的实例导入Kiosk。 现在使用Flight Class实例您可以访问方法addPassanger。 jst 喜欢Instance_Of_Flight_Class.Method_Name
答案 5 :(得分:0)
// 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);
}
}
答案 6 :(得分:0)
为什么不编辑checkIn(Passenger p)
方法以获得两个参数,因为您的Kiosk
看起来像某种Controller类:
checkIn(Passenger p, Flight f) {
if (f != null) f.addPassenger(p);
}
您应该避免通过addPassenger
对象中引用的Flight
对象调用Passenger
,正如其他人所说,因为您不希望Passenger
有任何内容与他自己添加到Flight
有关。
你可以,但不应通过他自己的Passenger
引用添加Flight
。让Passenger
拥有此代码:
public boolean addMeToFlight() {
return flight.addPassenger(this);
}
然后,您可以拨打Kiosk
:p.addMeToFlight();
。