Как сохранить выбор пользователя в новом списке массивов

#java

Вопрос:

Я уверен, что не был достаточно ясен в названии, разъясняя здесь все. У меня есть пассажир, бронирующий рейс, я хочу составить список, в котором будут храниться рейсы, забронированные пассажиром.

Это часть кода, в которой пассажир завершает бронирование, как мне составить новый список и добавить в него забронированный рейс

 @Override
public void payingFirstClassWithoutPromoCode(ArrayList<Flight> flightsList) {

    System.out.println("Confirm buying ticket: (yes or no)");
    String confirmation = scanner.nextLine();

    if (confirmation.equalsIgnoreCase("yes")) {
        if (selectedPassenger.getBalance() >= selectedFlight.getPriceForFirstClass()) {
            System.out.println("Successful reserved!");
            selectedPassenger.setBalance(selectedPassenger.getBalance() - selectedFlight.getPriceForFirstClass());
            System.out.println(selectedPassenger.getFirstName()   "'s new balance is: "   selectedPassenger.getBalance());
        } else {
            noFundsAvailable(flightsList);
        }
    } else if (confirmation.equalsIgnoreCase("no")) {
        cancellation(flightsList);
    } else {
        System.out.println("Wrong input!");
    }

}
 

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

1. Что такое selectedFlight ? Почему нет bookedFlights.add(selectedFlight); ?

2. Я думаю, что он спрашивает «Как добавить выбранный рейс в экземпляр пассажира».

Ответ №1:

Я думаю, вы можете добавить поле рейса в свой класс пассажира, а затем сделать selectedPassenger.setFlight(selectedFlight) Вот класс пассажира

 class Passenger{
   //other fields
   Flight flight;
   public void setFlight(Flight f){
    this.flight = f;
   }
 

Если у пассажира может быть несколько рейсов, затем объявите список в своем классе пассажиров, а затем выполните
selectedPassenger.getFlights().add(selectedFlight);

 class Passenger{
   //other fields
   List<Flight> flight;
   public Passenger(){
    //don't forget to initialize flight list
    flight = new ArrayList();
   }
   public List<Flight> getFlights(){
     return this.flight ;
   }
 

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

 public void addFlight(Flight f){
  this.flight.add(f);
}
 

тогда вы можете сделать

Выбранный пассажир.addFlight(выбранный полет);

Ответ №2:

Вы могли бы спроектировать свой класс пассажиров следующим образом:

 public class Passenger {
   private String name;
   private List<Flight> flights;

   //Getter and setter for name

   public Passenger(String name) {
      this.name = name;
      this.flights = new ArrayList<>();
   }

   public void addFlight(Flight flight) {
      flights.add(flight);
   }
}
 

Кстати, возможно, стоит провести рефакторинг вашего кода. Я отмечаю, что вы назвали свой метод payingFirstClassWithoutPromoCode(ArrayList<Flight> flightsList) . Я предполагаю, что у вас будет гораздо больше возможностей, а это значит, что вам придется написать несколько методов с очень похожим кодом.

Может быть хорошей идеей создать один метод, который может обрабатывать множество различных сценариев. Например, вы можете добавить тип билета (первый/бизнес/экономический класс) в качестве параметра в своем методе: payingWithoutPromoCode(ArrayList<Flight> flightsList, String ticketType) .

Это означает, что вам придется немного переписать свой метод. В моем примере вам, вероятно, потребуется переписать методы в вашем классе полетов. Вместо selectedFlight.getPriceForFirstClass() тебя это можно сделать selectedFlight.getPrice(ticketType) .