(я новичок в программировании, прошу прощения, если это глупый вопрос) Для моего 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, но это, очевидно, не то решение, которое ищет мой профессор.Любые предложения о том, как обойти это было бы здорово, спасибо.