Проверка стека на предмет несуществующего объекта - PullRequest
0 голосов
/ 06 марта 2019

(я новичок в программировании, прошу прощения, если это глупый вопрос) Для моего java-задания я должен создать парковку в переулке, представленном стеком.Автомобили приезжают и припарковываются, и если кто-то хочет вернуть их машину, все припаркованные за ней машины должны быть удалены и припаркованы на улице (отдельный архивист), тогда запрошенная машина будет удалена, а все машины на улице припаркованы обратно впереулок.

Я создаю автомобильные объекты из файла, содержащего текст, показанный ниже, который содержит лицензию String и время прибытия / отправления (A / D указывает, входит ли объект в стек или покидает его)

A EARLYBIRD 06 30 <-- arrives
A WORKER 07 00
A CEO 07 15
A CLERK 07 30 
A MANAGER 08 00 
A VP 09 00 
D CLERK 09 30 
D CEO 10 00
A SHOPPER 10 15
D EARLYBIRD 10 30 <-- departs
D WORKER 11 00
A JANITOR 11 00
D LOSTSOUL 11 15  <------(never arrived but wants to depart)
etc....

Задание требует, чтобы я использовал push pop и peek для перемещения машин между стеком (стоянка) и массивом (улица), но я не уверен, что делать, когда, например, "LOSTSOUL" хочетпокинуть стек, но его никогда не было в стеке.Вот раздел кода, в котором я сталкиваюсь с этой проблемой

    ArrayList<FeeCar> street = new ArrayList<FeeCar>();
    BoundedLinkedStack<FeeCar> alley = new BoundedLinkedStack<FeeCar>(SIZE);

    while(rd.hasNext())
    {
        if(rd.next().equals("A"))
        {
            license = rd.next();
            hr = rd.nextInt();
            min = rd.nextInt();
            FeeCar car = new FeeCar(license, hr, min);

            if (alley.size() == SIZE)
            {
                System.out.println(license + " was turned away at " + car.getArrivalTime() + " -- LOT FULL");
            }
            else
            {
                alley.push(car);
                System.out.println(license + " was parked at " + car.getArrivalTime());
            }
        }
        else
        {

            license = rd.next();
            departure = LocalTime.of(rd.nextInt(), rd.nextInt());

            -----------------------------------------
            |   LOSTSOUL causes stack underflow     |
            |---------------------------------------|
            V                                       V

            while (alley.peek().compareTo(license) == 0) 
            {
                street.add(alley.pop());
            }

            hourFee = (HOURS.between(alley.peek().getArrivalTime(), departure) * 5);
            System.out.println(license + " left at " + departure);
            alley.pop();

            for (FeeCar c : street) {
                alley.push(c);
            }
            street.clear();

        }
    }

По сути, выталкивает автомобили из стека до тех пор, пока не найдет машину с той же лицензией, LOSTSOUL, никогда не прибывающий в стек, заставляет его продолжать выскакиватьпока он не попытается вытолкнуть пустой стек и завершит программу.До сих пор моим единственным рабочим решением было заключить его в оператор if и пропустить его через эту строку в текстовом файле, если лицензия равна lostsoul, но это, очевидно, не то решение, которое ищет мой профессор.Любые предложения о том, как обойти это было бы здорово, спасибо.

...