亚马逊面试问题:devise一个面向对象的停车场
devise一个面向对象的停车场。 它有什么类和function。 应该说,满的,空的,也能find代客泊车的地方。 该地段有3种不同types的停车场:普通,残疾人和紧凑型。
谢谢!
这是一个快速启动,让齿轮转动…
ParkingLot是一个类。
ParkingSpace是一个类。
ParkingSpace有一个入口。
入口有一个位置或更具体地说,从入口的距离。
ParkingLotSign是一个类。
ParkingLot有ParkingLotSign。
ParkingLot拥有有限数量的ParkingSpaces。
HandicappedParkingSpace是ParkingSpace的一个子类。
RegularParkingSpace是ParkingSpace的子类。
CompactParkingSpace是ParkingSpace的一个子类。
ParkingLot保存一系列的ParkingSpaces,以及一个单独的arrays空置ParkingSpaces从它的入口的距离的顺序。
可以通过调用.Full(),.Empty()或.Normal()来告诉ParkingLotSign显示“full”,“empty”或“blank / normal /
派克是一个class级。
派克可以公园()。
派克可以Unpark()。
代客是派克的一个子类,可以调用ParkingLot.FindVacantSpaceNearestEntrance(),它返回一个ParkingSpace。
Parker有一个ParkingSpace。
Parker可以调用ParkingSpace.Take()和ParkingSpace.Vacate()。
Parker调用Entrance.Entering()和Entrance.Exiting()和ParkingSpace,在ParkingLot被占用或空出时通知ParkingLot,这样ParkingLot可以确定它是否已满。 如果新填满或新空或新填满或空,则应更改ParkingLotSign.Full()或ParkingLotSign.Empty()或ParkingLotSign.Normal()。
残疾帕克可能是帕克的一个子类,而紧凑型帕克是派克的一个子类,普通帕克是帕克的一个子类。 (实际上可能是矫枉过正)
在这个解决scheme中,派克应该改名为Car。
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, }
模型不是孤立存在的。 模拟汽车进入停车场的模型,引导您进入自由空间的embedded式系统,停车场收费系统或停车场中常见的自动化门票/售票机都是不同的。
在一个面向对象的停车场,不需要服务员,因为汽车将“知道如何停车”。
在地段find一辆可用的汽车将是困难的; 最普通的车型要么将所有的运动部件暴露为公共成员variables,要么就是没有窗户或门的“完全封装”的车辆。
我们的OO停车场的停车位不符合车辆的大小和形状(车位和车辆之间的“阻碍不匹配”),
我们地段的许可证标签在每个字母和数字之间都会有一个点。 只有以“_”开头的许可证才能使用手动停车,并且以“m_”开头的许可证将被拖走。
你将需要一个停车场,它拥有一个types“空间”的multidimensional array(在构造函数中指定)。 停车场可以通过调用填充和清空空格的函数来跟踪多less空间。空间可以容纳一个枚举types,告诉它是什么types的空间。 空间也有一个方法()。 对于代客停车,只要find第一个空间,打开,把车在那里。 你还需要一个汽车物体放在这个空间里,不pipe它是一个残疾人,紧凑的还是普通的汽车。
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; }
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; }