ออกแบบที่จอดรถ OO จะมีคลาสและฟังก์ชันอะไรบ้าง ควรบอกว่าเต็มว่างเปล่าและยังสามารถหาจุดจอดรถได้ ที่จอดรถมี 3 ประเภท ได้แก่ แบบธรรมดาคนพิการและขนาดกะทัดรัด
ขอบคุณ!
ออกแบบที่จอดรถ OO จะมีคลาสและฟังก์ชันอะไรบ้าง ควรบอกว่าเต็มว่างเปล่าและยังสามารถหาจุดจอดรถได้ ที่จอดรถมี 3 ประเภท ได้แก่ แบบธรรมดาคนพิการและขนาดกะทัดรัด
ขอบคุณ!
คำตอบ:
นี่คือการเริ่มต้นอย่างรวดเร็วเพื่อให้เกียร์เปลี่ยน ...
ParkingLot เป็นคลาส
ParkingSpace เป็นคลาส
ParkingSpace มีทางเข้า
ทางเข้ามีสถานที่ตั้งหรือโดยเฉพาะอย่างยิ่งระยะทางจากทางเข้า
ParkingLotSign เป็นคลาส
ParkingLot มี ParkingLotSign
ParkingLot มี ParkingSpaces จำนวน จำกัด
HandicappedParkingSpace เป็นคลาสย่อยของ ParkingSpace
RegularParkingSpace เป็นคลาสย่อยของ ParkingSpace
CompactParkingSpace เป็นคลาสย่อยของ ParkingSpace
ParkingLot เก็บอาร์เรย์ของ ParkingSpaces และอาร์เรย์ของ ParkingSpaces ว่างแยกตามลำดับระยะทางจากทางเข้า
ParkingLotSign สามารถบอกให้แสดง "เต็ม" หรือ "ว่าง" หรือ "ว่าง / ปกติ / ว่างบางส่วน" โดยเรียก. Full (), .Empty () หรือ. Normal ()
ปาร์คเกอร์เป็นคลาส
ปาร์คเกอร์สามารถจอด ().
Parker สามารถ Unpark ()
Valet เป็นคลาสย่อยของ Parker ที่สามารถเรียก ParkingLot.FindVacantSpaceNearestEntrance () ซึ่งส่งคืน ParkingSpace
Parker มี 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
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,
}
vacantParkingSpaces
จะไม่ถูกจัดเรียงอีกต่อไป คุณต้องจัดเรียงเพื่อให้findNearestVacant
คืนพื้นที่จอดรถที่ใกล้ที่สุด
findNearestVacant
เมื่อการใช้งานพบเฉพาะพื้นที่ว่างไม่จำเป็นต้องเป็น "ที่ใกล้ที่สุด" ทำไมไม่ "findVacant"? แม้ว่าจะเป็นการดีที่จะคืนพื้นที่ "ที่ใกล้ที่สุด" โดยใช้สถานะบางอย่างที่เก็บไว้ในคลาส บางทีเราสามารถจัดเก็บระยะทางจาก "ทางเข้า" และ "ทางออก" ในคลาส "ช่องว่าง" เพื่อให้สามารถคำนวณ "ที่ใกล้ที่สุด" ได้เช่นกันหรือเราสามารถกำหนดพิกัดของช่องว่างเพื่อให้ระยะทางจากทางเข้าทั้งหมดและ ทางออกสามารถคำนวณได้ตามความต้องการ
parkVehicle
ควรส่งคืนค่าบูลีนที่ระบุว่ารถจอดอยู่หรือไม่
ไม่มีโมเดลแยกต่างหาก โครงสร้างที่คุณกำหนดสำหรับการจำลองรถยนต์ที่เข้ามาในที่จอดรถระบบฝังตัวซึ่งจะนำคุณไปสู่พื้นที่ว่างระบบเรียกเก็บเงินสำหรับที่จอดรถหรือประตูอัตโนมัติ / เครื่องจำหน่ายตั๋วตามปกติในที่จอดรถล้วนแตกต่างกัน
ในลานจอดรถเชิงวัตถุไม่จำเป็นต้องมีคนดูแลเพราะรถจะ "รู้วิธีจอด"
การหารถที่ใช้งานได้ในล็อตจะเป็นเรื่องยาก โมเดลที่พบมากที่สุดจะมีชิ้นส่วนที่เคลื่อนไหวได้ทั้งหมดเป็นตัวแปรสาธารณะหรือจะเป็นรถยนต์ที่ "หุ้มเต็ม" ที่ไม่มีหน้าต่างหรือประตู
ที่จอดรถในที่จอดรถ OO ของเราจะไม่ตรงกับขนาดและรูปร่างของรถยนต์ ("ความต้านทานไม่ตรงกัน" ระหว่างช่องว่างและรถยนต์)
แท็กใบอนุญาตในล็อตของเราจะมีจุดระหว่างตัวอักษรและตัวเลขแต่ละตัว ที่จอดรถสำหรับผู้พิการจะใช้ได้เฉพาะกับใบอนุญาตที่ขึ้นต้นด้วย "_" และใบอนุญาตที่ขึ้นต้นด้วย "m_" จะถูกลากไป
คุณจะต้องมีที่จอดรถซึ่งเก็บอาร์เรย์หลายมิติ (ระบุในตัวสร้าง) ประเภท "ช่องว่าง" ที่จอดรถสามารถติดตามจำนวนช่องว่างที่ใช้ผ่านการเรียกไปยังฟังก์ชันที่เติมและช่องว่างช่องว่างสามารถระบุประเภทที่แจกแจงซึ่งบอกได้ว่าเป็นพื้นที่ประเภทใด Space ยังมีวิธีการ () สำหรับบริการจอดรถเพียงแค่หาที่ว่างแรกที่เปิดและวางรถไว้ที่นั่น นอกจากนี้คุณยังต้องมีวัตถุรถยนต์เพื่อวางในพื้นที่ซึ่งถือได้ว่าเป็นยานพาหนะสำหรับคนพิการขนาดกะทัดรัดหรือแบบธรรมดา
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;
}