#java
#java
Вопрос:
У меня есть пункт меню, который выглядит следующим образом
public static void airControlmenu() {
System.out.println("n1: Next plane is cleared for takeoff");
System.out.println("2: Last plane on runway 1 must return to terminal.");
System.out.println("3: Last plane on runway 2 must return to terminal.");
}
Когда пользователь выбирает 2 или 3, последний самолет на взлетно-посадочной полосе отправляется в терминал. Runway1, runway2 и terminal — это методы deque, это то, что у меня есть до сих пор:
static Deque<Airplane> runway1 = new ArrayDeque<>();
static Deque<Airplane> runway2 = new ArrayDeque<>();
static Deque<Airplane> terminal = new ArrayDeque<>();
static Airplane plane1 = new Airplane("AA", 4992);
static Airplane plane2 = new Airplane("DL", 1345);
static Airplane plane3 = new Airplane("AA", 4531);
static Airplane plane4 = new Airplane("DL", 9873);
static Airplane plane5 = new Airplane("AA", 3414);
static Airplane plane6 = new Airplane("DL", 2366);
public static void main(String[] args) {
testCase4();
while (!runway1.isEmpty() || !runway2.isEmpty()) {
printRunway();
airControlmenu();
Scanner input = new Scanner(System.in);
String AirChoice = input.next();
int AirportNum = Integer.parseInt(AirChoice);
if (AirportNum == 1 ) {
runway1.pollFirst();
runway2.pollFirst();
} else if (AirportNum == 2) {
runway1.pollLast();
}else if (AirportNum == 3) {
runway2.removeLast();
}
}
System.out.println("nnThere are no more planes on runways 1 and 2.");
}
У меня просто возникли небольшие проблемы с удалением самолета и добавлением его в терминал. вероятно, это простое исправление.
Комментарии:
1. Почему вы удаляете терминал с runway1, если AirportNum == 2?
2. На самом деле я пытался отправить последний самолет на взлетно-посадочной полосе 1 в терминал
3. Я не уверен, что это приводит к сбою вашей программы, но вы удаляете из runway1, не проверяя, пусто оно или нет в первом операторе if. То же самое с runway2 во втором else if.
4. И можете ли вы объяснить, что вы пытаетесь сделать во втором операторе else if? Кажется, что вы пытаетесь найти и удалить весь объект ArrayDeque в runway1, а не добавлять его в терминал
5. Хорошо, я исправил причину сбоя, мне просто нужна помощь в удалении самолета с взлетно-посадочной полосы и добавлении его в терминал
Ответ №1:
Когда вы говорите, что удаляете самолет с взлетно-посадочной полосы и добавляете его в терминал, я предполагаю, что вы хотите удалить его из массива runway и добавить в массив terminal. При редактировании вы изменили код с runway1.remove на runway1.pollFirst(). Этот метод возвращает объект, который вы удалили, поэтому вы хотите сохранить его в некоторой переменной, например, так:
Airplane plane = runway1.pollLast();
Что это сделает, так это удалит плоскость из runway1 и сохранит ее в переменной, чтобы затем вы могли добавить ее в терминал с помощью:
terminal.add(plane);
Я не уверен, хотели ли вы добавить плоскость в начало или в конец терминала, .add () добавляет ее спереди, .addLast () добавит ее сзади. Это должно позаботиться о том, что вы хотели сделать. В качестве альтернативы, вы могли бы сократить его до одной строки кода, если хотите, вот так:
terminal.add(runway1.pollLast());
которая выполняет то же самое, что и предыдущие 2 строки, однако у вас просто не будет плоскости, сохраненной в переменной, на случай, если вам понадобится снова использовать этот экземпляр (похоже, что вы этого не делаете, но я могу ошибаться).
Комментарии:
1. Я знаю, что не могу сказать спасибо или что-то еще. но как бы я мог чередовать два arraydeques после каждого меню? как и в первый раз, когда пользователь выбирает вариант 1, самолет взлетит на взлетно-посадочной полосе1. Во второй раз, когда они выбирают вариант 1, я хочу, чтобы он взлетал с самолета на взлетно-посадочной полосе2
2. Извините за поздний ответ, только что вернулся к своему компьютеру. Если вы работаете только с двумя взлетно-посадочными полосами, у вас могла бы быть переменная, которая переключается между 1 и 2, и использовать ее в сочетании с некоторыми операторами if. Таким образом, переменной может быть присвоено значение 1, а при выборе опции 1 переменная теперь имеет значение 2. При повторном выборе опции 1 переменной теперь снова присваивается значение 1. Вам понадобится оператор if-else, если переменная == 1, runway1.poll; переменная = 2; else, runway2.poll, переменная =1;