#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);
}
}