首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >亚马逊面试问题:设计一个面向对象的停车场

亚马逊面试问题:设计一个面向对象的停车场
EN

Stack Overflow用户
提问于 2009-04-19 06:07:19
回答 5查看 203.5K关注 0票数 118

设计一个面向对象的停车场。它将具有哪些类和函数。它应该说,满了,空了,还能找到代客停车的地方。停车场有3种不同的停车位:普通停车位、残疾人停车位和紧凑型停车位。

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-19 06:22:28

这里有一个让齿轮转动起来的快速开始。

ParkingLot是一个类。

ParkingSpace是一个类。

ParkingSpace有个入口。

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

ParkingLotSign是一个类。

ParkingLot有一个ParkingLotSign。

ParkingLot的ParkingSpaces数量是有限的。

HandicappedParkingSpace是ParkingSpace的一个子类。

RegularParkingSpace是ParkingSpace的一个子类。

CompactParkingSpace是ParkingSpace的一个子类。

ParkingLot按距其入口的距离顺序保存ParkingSpaces数组和空置ParkingSpaces数组。

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

帕克是一个班级。

Parker can Park()。

Parker可以Unpark()。

Valet是Parker的一个子类,它可以调用返回ParkingSpace的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。

票数 166
EN

Stack Overflow用户

发布于 2011-12-25 15:47:49

代码语言:javascript
运行
复制
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,
}
票数 70
EN

Stack Overflow用户

发布于 2009-05-07 16:46:39

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/764933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档