Входные данные из конструктора и из метода

#java #arraylist

Вопрос:

Я создаю какую-то систему бронирования авиабилетов. Я хочу, чтобы некоторые пользователи уже были сохранены, и вот как я это сделал:

  Passengers passenger1 = new Passengers("John", "Slavic", "john@gmail.com", 3000, true);
 

Также у меня есть это, чтобы добавить это passenger1 в ArrayList:

 ArrayList<Passengers> passengersArrayList = new ArrayList<>();
passengersArrayList.add(passenger1);
 

Тогда у меня есть один случай переключения, который дает пользователю возможность добавить нового пассажира:

 case 3:
passengersControllerImpl.addNewPassenger();
break;
 

меня есть и другие, но это важно для моей проблемы)

PassengersControllerImpl является классом и 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);

    }
}
 

Как вы можете видеть в последних двух строках кода, именно так я сохраняю пассажира, когда создаю его во время работы программы. Моя проблема в том, что когда я запускаю программу и вручную добавляю пассажира с помощью этого метода, как добавить этого нового пассажира в мой уже созданный список массивов из основного метода?

Ответ №1:

Хотя я не совсем уверен в том, о чем вы спрашиваете, я бы передал уже существующий ArrayList в качестве аргумента методу addNewPassenger ().

Вот как бы я это реализовал:

 case 3:
passengersControllerImpl.addNewPassenger(passengersArrayList);
break;
 

И здесь, в классе PassengersControllerImpl:

 @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 добавляется новый пассажир.

Дайте мне знать, если это помогло 🙂

Комментарии:

1. Вы хорошо поняли, вот и все!

Ответ №2:

Можете ли вы поделиться тем, как выглядит ваш основной метод?

Это похоже на проблему с охватом. Прежде всего, я предполагаю, что

 ArrayList<Passengers> passengersArrayList = new ArrayList<>();
passengersArrayList.add(passenger1);
 

и

 case 3:
passengersControllerImpl.addNewPassenger();
break;
 

находятся в вашем основном методе.

В этом случае лучшим решением было бы что-то вроде этого:

 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;

}
}
 

Таким образом, в вашем основном методе вы можете вызвать passengersArrayList.add(passengersControllerImpl.addNewPassenger())

Проблема с вашим кодом раньше заключалась в том, что вы ничего не делали с объектом passenger. Если вы зададите тип возвращаемого значения, вы можете использовать класс для возврата объекта и добавления его в список

Ответ №3:

Вам нужно сохранить свой список пассажиров в переменной, потому что в вашем подходе список пассажиров существует только для одного входа, а другой создается для другого входа.

Вы должны сделать что-то вроде этого:

     final Scanner scanner = new Scanner(System.in);
    final ArrayList<Passengers> passengersList = new ArrayList<>();

    @Override
    public void addNewPassenger() {
        final Passengers passengers = new Passengers();

        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!");

        passengersList.add(passengers);

    }
}