как удалить последнюю плоскость взлетно-посадочной полосы и добавить ее в терминал?

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