Java语法方法和类

时间:2012-09-28 08:25:15

标签: 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 ");


        }


    }
}

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

7 个答案:

答案 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);
}

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