Java 从构造函数和方法输入数据

Java 从构造函数和方法输入数据,java,arraylist,Java,Arraylist,我正在创建一些飞机预订系统。我想已经保存了一些用户,我就是这样做的: Passengers passenger1 = new Passengers("John", "Slavic", "john@gmail.com", 3000, true); 此外,我还要在ArrayList: ArrayList<Passengers> passengersArrayList = new ArrayList<>(); pa

我正在创建一些飞机预订系统。我想已经保存了一些用户,我就是这样做的:

 Passengers passenger1 = new Passengers("John", "Slavic", "john@gmail.com", 3000, true);
此外,我还要在
ArrayList:

ArrayList<Passengers> passengersArrayList = new ArrayList<>();
passengersArrayList.add(passenger1);
(我还有其他问题,但这一点对我的问题很重要)

PassengerControllerImpl
是类,而
addNewPassenger
是方法,其外观如下:

   public class PassengersControllerImpl implements PassengersController{

    final Scanner scanner = new Scanner(System.in);
    final Passengers passengers = new Passengers();

    @Override
    public void addNewPassenger() {

        System.out.println("Creating new passenger!");

        System.out.print("Add name of passenger: ");
        passengers.setName(scanner.nextLine());

        System.out.print("Add last name of passenger: ");
        passengers.setLastName(scanner.nextLine());

        System.out.print("Add email of passenger: ");
        passengers.setEmail(scanner.nextLine());

        System.out.print("Add balance of passenger: ");
        passengers.setBalance(scanner.nextDouble());

        System.out.print("Is passenger vip? (true or false): ");
        passengers.setVip(scanner.nextBoolean());

        System.out.println("You added a new passenger!");

        ArrayList<Passengers> passengersList = new ArrayList<>();
        passengersList.add(passengers);

    }
}
公共类PassengersControllerImpl实现PassengersController{
最终扫描仪=新扫描仪(System.in);
最终乘客=新乘客();
@凌驾
公共无效添加新乘客(){
System.out.println(“创建新乘客!”);
系统输出打印(“添加乘客姓名:”);
.setName(scanner.nextLine());
系统输出打印(“添加乘客姓氏:”);
.setLastName(scanner.nextLine());
系统输出打印(“添加乘客电子邮件:”);
setEmail(scanner.nextLine());
系统输出打印(“添加乘客余额:”);
乘客.setBalance(scanner.nextDouble());
系统输出打印(“是否乘客vip?(正确或错误):”;
setVip(scanner.nextBoolean());
System.out.println(“您添加了一名新乘客!”);
ArrayList PassengerList=新的ArrayList();
乘客列表。添加(乘客);
}
}

正如您看到的最后两行代码,这就是我在程序运行时创建乘客时如何保存乘客的方式。我的问题是,当我运行程序并使用该方法手动添加乘客时,如何从main方法将新乘客添加到我已经创建的数组列表中?

虽然我不确定您要问什么,但我会将已经存在的ArrayList作为参数传递给addNewPassenger()方法

以下是我将如何实施它:

case 3:
passengersControllerImpl.addNewPassenger(passengersArrayList);
break;
在这里,在乘客控制器mpl课程中:

@Override
public void addNewPassenger(ArrayList<Passengers> arr) {
        System.out.println("Creating new passenger!");

        System.out.print("Add name of passenger: ");
        passengers.setName(scanner.nextLine());

        System.out.print("Add last name of passenger: ");
        passengers.setLastName(scanner.nextLine());

        System.out.print("Add email of passenger: ");
        passengers.setEmail(scanner.nextLine());

        System.out.print("Add balance of passenger: ");
        passengers.setBalance(scanner.nextDouble());

        System.out.print("Is passenger vip? (true or false): ");
        passengers.setVip(scanner.nextBoolean());

        System.out.println("You added a new passenger!");

        arr.add(passengers);

    }
@覆盖
公共无效添加新乘客(ArrayList arr){
System.out.println(“创建新乘客!”);
系统输出打印(“添加乘客姓名:”);
.setName(scanner.nextLine());
系统输出打印(“添加乘客姓氏:”);
.setLastName(scanner.nextLine());
系统输出打印(“添加乘客电子邮件:”);
setEmail(scanner.nextLine());
系统输出打印(“添加乘客余额:”);
乘客.setBalance(scanner.nextDouble());
系统输出打印(“是否乘客vip?(正确或错误):”;
setVip(scanner.nextBoolean());
System.out.println(“您添加了一名新乘客!”);
到达(乘客);
}
导致新乘客添加到原始ArrayList PassengerArrayList


如果有帮助,请告诉我:)

你能分享一下你的主要方法吗

这看起来像是一个范围问题。首先,我假设

ArrayList<Passengers> passengersArrayList = new ArrayList<>();
passengersArrayList.add(passenger1);
你的主要方法是什么

在这种情况下,更好的解决方案如下:

public class PassengersControllerImpl implements PassengersController{

final Scanner scanner = new Scanner(System.in);
// Remove, not needed final Passengers passengers = new Passengers();

// Set return type to be Passengers
@Override
public Passengers addNewPassenger() {

    System.out.println("Creating new passenger!");
    Passengers passengers = new Passengers();

    System.out.print("Add name of passenger: ");
    passengers.setName(scanner.nextLine());

    System.out.print("Add last name of passenger: ");
    passengers.setLastName(scanner.nextLine());

    System.out.print("Add email of passenger: ");
    passengers.setEmail(scanner.nextLine());

    System.out.print("Add balance of passenger: ");
    passengers.setBalance(scanner.nextDouble());

    System.out.print("Is passenger vip? (true or false): ");
    passengers.setVip(scanner.nextBoolean());

    System.out.println("You added a new passenger!");

    return passengers;

}
}
这样,在main方法中,可以调用
passengersArrayList.add(passengersControllerImpl.addNewPassenger())


以前代码的问题是您没有对乘客对象执行任何操作。如果设置返回类型,则可以使用类返回对象并将其添加到列表中

您需要将乘客列表存储在变量中,因为在您的方法中,乘客列表仅存在于一个输入中,而另一个是为另一个输入创建的

你应该这样做:

public class PassengersControllerImpl implements PassengersController{

final Scanner scanner = new Scanner(System.in);
// Remove, not needed final Passengers passengers = new Passengers();

// Set return type to be Passengers
@Override
public Passengers addNewPassenger() {

    System.out.println("Creating new passenger!");
    Passengers passengers = new Passengers();

    System.out.print("Add name of passenger: ");
    passengers.setName(scanner.nextLine());

    System.out.print("Add last name of passenger: ");
    passengers.setLastName(scanner.nextLine());

    System.out.print("Add email of passenger: ");
    passengers.setEmail(scanner.nextLine());

    System.out.print("Add balance of passenger: ");
    passengers.setBalance(scanner.nextDouble());

    System.out.print("Is passenger vip? (true or false): ");
    passengers.setVip(scanner.nextBoolean());

    System.out.println("You added a new passenger!");

    return passengers;

}
}
final Scanner=新扫描仪(System.in);
最终ArrayList PassengerList=新ArrayList();
@凌驾
公共无效添加新乘客(){
最终乘客=新乘客();
System.out.println(“创建新乘客!”);
系统输出打印(“添加乘客姓名:”);
.setName(scanner.nextLine());
系统输出打印(“添加乘客姓氏:”);
.setLastName(scanner.nextLine());
系统输出打印(“添加乘客电子邮件:”);
setEmail(scanner.nextLine());
系统输出打印(“添加乘客余额:”);
乘客.setBalance(scanner.nextDouble());
系统输出打印(“是否乘客vip?(正确或错误):”;
setVip(scanner.nextBoolean());
System.out.println(“您添加了一名新乘客!”);
乘客列表。添加(乘客);
}
}

你理解得很好,就是这样!
public class PassengersControllerImpl implements PassengersController{

final Scanner scanner = new Scanner(System.in);
// Remove, not needed final Passengers passengers = new Passengers();

// Set return type to be Passengers
@Override
public Passengers addNewPassenger() {

    System.out.println("Creating new passenger!");
    Passengers passengers = new Passengers();

    System.out.print("Add name of passenger: ");
    passengers.setName(scanner.nextLine());

    System.out.print("Add last name of passenger: ");
    passengers.setLastName(scanner.nextLine());

    System.out.print("Add email of passenger: ");
    passengers.setEmail(scanner.nextLine());

    System.out.print("Add balance of passenger: ");
    passengers.setBalance(scanner.nextDouble());

    System.out.print("Is passenger vip? (true or false): ");
    passengers.setVip(scanner.nextBoolean());

    System.out.println("You added a new passenger!");

    return passengers;

}
}