检查堆栈中是否存在不存在的对象

时间:2019-03-06 01:36:45

标签: java linked-list stack stackunderflow

(我是编程新手,如果这是一个愚蠢的问题,我会请求原谅。)对于我的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,则跳过文本文件中的该行,但这显然不是我的教授正在寻找的解决方案。谢谢您提供有关如何解决此问题的建议。

0 个答案:

没有答案