设计一个面向对象的停车场。它将具有哪些类和函数。它应该说,满了,空了,还能找到代客停车的地方。停车场有3种不同的停车位:普通停车位、残疾人停车位和紧凑型停车位。
谢谢!
发布于 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。
发布于 2011-12-25 15:47:49
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,
}
发布于 2009-05-07 16:46:39
模型不是孤立存在的。您定义的用于模拟进入停车场的汽车、引导您进入自由空间的嵌入式系统、停车场计费系统或停车场中常见的自动闸机/售票机的结构都是不同的。
https://stackoverflow.com/questions/764933
复制相似问题