חניון
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Kotlin של Coddy. שיעור 55 מתוך 57.
אתגר
קשהבנו חניון.
- ל-enum
Sizeיש אתSMALL,MEDIUMו-LARGE, בסדר הזה, ולכל אחד מהםlabelבאותיות קטנות. Vehicle(plate)היא מחלקה אטומה עם המאפיינים המופשטיםsizeו-hourlyRate.Motorbikeהיא קטנה (1 לשעה),Carהיא בינונית (3) ו-Vanהיא גדולה (5).Garage(small, medium, large)נוצרת עם מספר מקומות החניה לכל גודל.park(vehicle)מחנה את הרכב במקום פנוי בגודל שלו, או, אם אין כזה, במקום הפנוי הבא בגודל גדול יותר, ומחזירהparked AB12 in medium,full for AB12אוAB12 is already parked.leave(plate, hours)מפנה את המקום ומחזירהAB12 paid 9(תעריף כפול מספר השעות, שעה אחת לפחות), אוno vehicle AB12.status()מחזירהfree: small 1, medium 0, large 2.
הקוד שסופק קורא את מספר מקומות החניה בפורמט small,medium,large, ואז פקודות כמו park car AB12 (bike, car או van), leave AB12 3 או status, ומדפיס כל תשובה.
את הקוד שלך כותבים בקבצים Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt ו-Garage.kt. הקובץ Main.kt מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.
נסו בעצמכם
fun main() {
// קוד הקלט/פלט שסופק: השאירו אותו כפי שהוא
val input = generateSequence(::readLine).toList()
val (small, medium, large) = input[0].split(",").map { it.toInt() }
val garage = Garage(small, medium, large)
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
when (p[0]) {
"park" -> {
val vehicle = when (p[1]) {
"bike" -> Motorbike(p[2])
"van" -> Van(p[2])
else -> Car(p[2])
}
println(garage.park(vehicle))
}
"leave" -> println(garage.leave(p[1], p[2].toInt()))
else -> println(garage.status())
}
}
}
כל השיעורים ביחידה תכנות מונחה עצמים
1מחלקות ואובייקטים
עבודה עם קבציםהגדרת מחלקותבנאים ראשייםבלוקי init ואימות נתוניםבנאים משנייםסיכום – כרטיס ספרייהתרגלו בעצמכם: Kotlin אונליין