Nhà để xe
Thuộc phần Lập trình hướng đối tượng trong hành trình Kotlin của Coddy. Bài học 55 trên 57.
Thử thách
KhóXây dựng một nhà để xe.
- Enum
Sizecó các giá trịSMALL,MEDIUMvàLARGE, theo thứ tự đó, mỗi giá trị cólabelviết thường. Vehicle(plate)là một lớp sealed với các thuộc tính trừu tượngsizevàhourlyRate.Motorbikecó kích thước nhỏ (1 mỗi giờ),Carcó kích thước vừa (3) vàVancó kích thước lớn (5).Garage(small, medium, large)được tạo với số chỗ cho mỗi kích thước.park(vehicle)đưa phương tiện vào một chỗ trống có cùng kích thước hoặc, nếu không còn chỗ, vào chỗ trống có kích thước lớn hơn kế tiếp, rồi trả lờiparked AB12 in medium,full for AB12hoặcAB12 is already parked.leave(plate, hours)giải phóng chỗ đỗ và trả lờiAB12 paid 9(mức phí nhân với số giờ, tối thiểu 1 giờ), hoặcno vehicle AB12.status()trả lờifree: small 1, medium 0, large 2.
Code được cung cấp đọc số chỗ theo định dạng small,medium,large, sau đó đọc các lệnh park car AB12 (bike, car hoặc van), leave AB12 3 hoặc status, rồi in ra từng câu trả lời.
Code của bạn nằm trong các tệp Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt và Garage.kt. Main.kt chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.
Tự làm thử
fun main() {
// Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
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())
}
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpHàm khởi tạo chínhKhối init và kiểm tra tính hợp lệHàm khởi tạo phụÔn tập: thẻ thư viện4Kế thừa
Lớp mở và lớp conGhi đè thành viênsuper và hàm khởi tạoLớp trừu tượngÔn tập: Danh bạ nhân viên2Thuộc tính và tính đóng gói
Trình truy cập tùy chỉnhBộ sửa đổi phạm vi truy cậpSetter riêng tưlazy và lateinitÔn tập: tài khoản ngân hàng5Giao diện
Khai báo giao diệnPhương thức mặc địnhNhiều giao diệnGiao diện như kiểu dữ liệuÔn tập: Phương thức thanh toánTự luyện tập: Playground Kotlin