Tamas Szigeti
01/15/2024, 4:21 PMdata class *ParkingLot*(*val* size: Int) {
    data class *Car*(*val* plate: String, *val* color: String) {
        override fun *toString*() = "$plate $color"
    }
    data class *Spot*(*val* spotNumber: Int, *val* isFree: Boolean, *val* car: Car?) {
        override fun *toString*() = "$spotNumber $car"
    }
    private *val* parkingData = Array(size) { Spot(it + 1, *true*, *null*) }
    *init* {
        *if* (size != 0) println("Created a parking lot with $size spots.")
    }
    override fun *toString*(): String {
        *val* str = parkingData.filter { !it.isFree }.joinToString("\n") { it.toString() }
        return *when* {
            size == 0 -> "Sorry, a parking lot has not been created."
            str.isEmpty() -> "Parking lot is empty."
            *else* -> str
        }
    }
}
fun *main*() {
    *var* parkingLot = ParkingLot(0)
    *while* (*true*) {
        *val* command = readLine()!!.split(" ")
        *when* (command[0]) {
            "create" -> parkingLot = ParkingLot(command[1].toInt())
            //"park" -> parkingLot.park(ParkingLot.Car(command[1], command[2]))
            //"leave" -> parkingLot.leave(command[1].toInt())
            "status" -> println(parkingLot)
            "exit" -> *return*
        }
    }
}
If it is not the correct channel, which channel would it be?Goetz Markgraf
01/15/2024, 5:11 PMwhen statement, there is a status case. In this case, you explicitly call println with the instance of ParkingLot . This class decends from Any which is Object in Java (more or less).
println(Object) calls toString on the object. That’s why this is called.