Bộ lập lịch sự kiện
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 56 trên 57.
Thử thách
KhóHãy xây dựng bộ lập lịch sự kiện.
Event(title, day, start, end)(giờ từ 0 đến 24) là một lớp triển khaiComparable<Event>, được sắp xếp theo ngày, rồi đến giờ bắt đầu, sau đó là tiêu đề. Hai sự kiện bằng nhau khi tiêu đề và ngày của chúng trùng khớp (cùng một sự kiện được nhập hai lần), vì vậy hãy ghi đèequalsvàhashCodedựa trên hai thuộc tính đó. Sự kiện được in ra theo dạngday 3 09-11 standup, với giờ gồm hai chữ số.overlaps(other)trả về true khi hai sự kiện trong cùng ngày bắt đầu trước giờ kết thúc của sự kiện còn lại.Scheduler.add(event)trả vềinvalid: standupkhi sự kiện không kết thúc sau khi bắt đầu,duplicatenếu là sự kiện bằng nhau,conflicts with reviewnếu có sự kiện đầu tiên bị chồng lấn theo thứ tự trong lịch, hoặcadded.agenda()trả về các sự kiện đã sắp xếp, cònbusiestDay()trả vềbusiest day 3: 5hcho ngày có tổng số giờ được đặt nhiều nhất (nếu bằng nhau thì chọn ngày sớm hơn), hoặcno events.
Code được cung cấp đọc các sự kiện từ những dòng có dạng title,day,start,end, in ra câu trả lời cho từng dòng, sau đó in lịch (mỗi sự kiện trên một dòng) và ngày bận nhất.
Code của bạn nằm trong Event.kt và Scheduler.kt. Main.kt chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
fun main() {
// Đoạn code đầu vào/đầu ra đã cung cấp: giữ nguyên
val input = generateSequence(::readLine).toList()
val scheduler = Scheduler()
for (line in input) {
val p = line.split(",")
println(scheduler.add(Event(p[0], p[1].toInt(), p[2].toInt(), p[3].toInt())))
}
for (e in scheduler.agenda()) println(e)
println(scheduler.busiestDay())
}
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