(我是编程新手,如果这是一个愚蠢的问题,我会请求原谅。)对于我的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....
这项作业要求我使用“推弹”和“偷看”功能在(停车场)堆栈和(街道)数组列表之间移动汽车,但是我不确定例如“ 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语句周围加上if语句,如果许可证等于lostsoul,则跳过文本文件中的该行,但这显然不是我的教授正在寻找的解决方案。谢谢您提供有关如何解决此问题的建议。