亚马逊面试问题:设计一个OO停车场[已关闭]

问题描述 投票:0回答:5

设计一个OO停车场。它有哪些类和功能?它应该说,满了,空了,还能够找到代客泊车的地方。该停车场有 3 种不同类型的停车位:普通停车位、残疾人停车位和紧凑型停车位。

oop
5个回答
167
投票

这是让齿轮转动的快速入门...

ParkingLot 是一个类。

ParkingSpace 是一个类。

停车位有入口。

入口有一个位置,或更具体地说,是距入口的距离。

ParkingLotSign 是一个类。

停车场有停车场标志。

停车场的停车位数量有限。

HandicappedParkingSpace 是 ParkingSpace 的子类。

RegularParkingSpace 是 ParkingSpace 的子类。

CompactParkingSpace 是 ParkingSpace 的子类。

ParkingLot 保留 ParkingSpaces 数组,以及按照距其入口的距离的顺序排列的单独的空闲 ParkingSpaces 数组。

可以通过调用 .Full()、.Empty() 或 .Normal() 来告诉 ParkingLotSign 显示“已满”、“空”或“空白/正常/部分占用”

帕克是一个班级。

帕克可以停车()。

Parker 可以 Unpark()。

Valet 是 Parker 的子类,可以调用 ParkingLot.FindVacantSpaceNearestEntrance(),返回一个 ParkingSpace。

帕克有停车位。

Parker 可以调用 ParkingSpace.Take() 和 ParkingSpace.Vacate()。

Parker 调用 Entrance.Entering() 和 Entrance.Exiting(),ParkingSpace 会在有人或空出时通知 ParkingLot,以便 ParkingLot 确定是否已满。如果它是新满或新空或新未满或空,则应更改 ParkingLotSign.Full() 或 ParkingLotSign.Empty() 或 ParkingLotSign.Normal()。

HandicappedParker 可以是 Parker 的子类,CompactParker 是 Parker 的子类,RegularParker 是 Parker 的子类。 (实际上可能有点矫枉过正。)

在此解决方案中,Parker 可能应重命名为 Car。


74
投票
public class ParkingLot 
{
    Vector<ParkingSpace> vacantParkingSpaces = null;
    Vector<ParkingSpace> fullParkingSpaces = null;

    int parkingSpaceCount = 0;

    boolean isFull;
    boolean isEmpty;

    ParkingSpace findNearestVacant(ParkingType type)
    {
        Iterator<ParkingSpace> itr = vacantParkingSpaces.iterator();

        while(itr.hasNext())
        {
            ParkingSpace parkingSpace = itr.next();

            if(parkingSpace.parkingType == type)
            {
                return parkingSpace;
            }
        }
        return null;
    }

    void parkVehicle(ParkingType type, Vehicle vehicle)
    {
        if(!isFull())
        {
            ParkingSpace parkingSpace = findNearestVacant(type);

            if(parkingSpace != null)
            {
                parkingSpace.vehicle = vehicle;
                parkingSpace.isVacant = false;

                vacantParkingSpaces.remove(parkingSpace);
                fullParkingSpaces.add(parkingSpace);

                if(fullParkingSpaces.size() == parkingSpaceCount)
                    isFull = true;

                isEmpty = false;
            }
        }
    }

    void releaseVehicle(Vehicle vehicle)
    {
        if(!isEmpty())
        {
            Iterator<ParkingSpace> itr = fullParkingSpaces.iterator();

            while(itr.hasNext())
            {
                ParkingSpace parkingSpace = itr.next();

                if(parkingSpace.vehicle.equals(vehicle))
                {
                    fullParkingSpaces.remove(parkingSpace);
                    vacantParkingSpaces.add(parkingSpace);

                    parkingSpace.isVacant = true;
                    parkingSpace.vehicle = null;

                    if(vacantParkingSpaces.size() == parkingSpaceCount)
                        isEmpty = true;

                    isFull = false;
                }
            }
        }
    }

    boolean isFull()
    {
        return isFull;
    }

    boolean isEmpty()
    {
        return isEmpty;
    }
}

public class ParkingSpace 
{
    boolean isVacant;
    Vehicle vehicle;
    ParkingType parkingType;
    int distance;
}

public class Vehicle 
{
    int num;
}

public enum ParkingType
{
    REGULAR,
    HANDICAPPED,
    COMPACT,
    MAX_PARKING_TYPE,
}

12
投票

模型并不是孤立存在的。您为模拟汽车进入停车场、引导您进入空闲空间的嵌入式系统、停车场计费系统或停车场常见的自动门/售票机定义的结构都是不同的。


8
投票

在面向对象的停车场中,不需要服务员,因为汽车会“知道如何停车”。

在停车场找到一辆可用的汽车会很困难;最常见的模型要么将所有移动部件暴露为公共成员变量,要么它们将是没有门窗的“完全封装”汽车。

我们 OO 停车场的停车位与汽车的尺寸和形状不匹配(停车位与汽车之间的“阻抗不匹配”)

我们批次上的许可证标签的每个字母和数字之间都有一个点。残疾人停车位仅适用于以“_”开头的驾照,以“m_”开头的驾照将被拖走。


6
投票

您需要一个停车场,其中包含“空间”类型的多维数组(在构造函数中指定)。停车场可以通过调用填充和清空空间的函数来跟踪占用了多少空间。Space 可以保存一个枚举类型,告诉它是什么类型的空间。 Space 还有一个 take() 方法。对于代客泊车,只需找到第一个空位并将汽车停在那里即可。您还需要一个 Car 对象来放置在该空间中,该对象可以容纳它是残疾车辆、紧凑型车辆还是普通车辆。


class ParkingLot
{
    Space[][] spaces;

    ParkingLot(wide, long); // constructor

    FindOpenSpace(TypeOfCar); // find first open space where type matches
}

enum TypeOfSpace = {compact, handicapped, regular };
enum TypeOfCar = {compact, handicapped, regular };

class Space
{
    TypeOfSpace type;
    bool empty;
    // gets and sets here
    // make sure car type
}

class car
{
    TypeOfCar type;
}

© www.soinside.com 2019 - 2024. All rights reserved.