程序包含 1 个主函式、1 个 赛车(RacingCar)类、1 个 Mercedes 类、1 个 Ferrari 类、1 个BMW类与1个跑(Run)接口。RacingCar类有位置(position)属性,用来纪录实例目前的位置,Run 接口有跑(go)方法须实现。Mercedes 类、Ferrari 类与 BMW 类须继承 RacingCar类,并实现跑接口。3 类中都有名称(name)属性,用以暂存赛车实例名称,而实例调用跑方法,将改变实例的位置。在主函式中分别创建 3 种赛车的实例,在模拟赛车的循环中,轮流调用实例的 go 方法,用随机数random方法改变赛车实例的位置(每次的位移量不宜过大),3 个实例移动完后,分别打印出各车辆当前的位置,并检查是否有赛车实例已移动超过 200 公里,若有,则该实例获胜,退出模拟赛车循环,打印出获胜车辆的名称,程序结束。
import java.util.*
object Main {
fun main(args: Array<String>) {
val mercedes = Mercedes()
val ferrari = Ferrari()
val bmw = BMW()
while (true) {
mercedes.go(Random().nextInt(10))
ferrari.go(Random().nextInt(10))
bmw.go(Random().nextInt(10))
println(mercedes.name + ":" + mercedes.position)
println(ferrari.name + ":" + ferrari.position)
println(bmw.name + ":" + bmw.position)
if (mercedes.position >= 200) {
println("The winner is:" + mercedes.name)
break
}
if (ferrari.position >= 200) {
println("The winner is:" + ferrari.name)
break
}
if (bmw.position >= 200) {
println("The winner is:" + bmw.name)
break
}
}
}
internal open class RacingCar {
var position = 0
}
internal interface Run {
fun go(distance: Int)
}
internal class Mercedes : RacingCar(), Run {
var name = "Mercedes"
override fun go(distance: Int) {
position += distance
}
}
internal class Ferrari : RacingCar(), Run {
var name = "Ferrari"
override fun go(distance: Int) {
position += distance
}
}
internal class BMW : RacingCar(), Run {
var name = "BMW"
override fun go(distance: Int) {
position += distance
}
}
}
fun main(args: Array<String>) {
val carList = arrayListOf(RaceCar("Car1"),RaceCar("Car2"),RaceCar("Car3"))
Thread{
run {
while (true) {
carList.forEach {
it.running(Random().nextInt(10) + 5)
println("${it.name} current sumDistance is:${it.sumDistance}")
}
carList.forEach {
if (it.sumDistance >= 200) {
println("winner is->${it.name}")
return@Thread
}
}
Thread.sleep(500)
}
}
}.start()
}
data class RaceCar(var name: String, var sumDistance: Int = 0) : Running {
override fun running(delta: Int) {
sumDistance += delta
}
}
interface Running {
fun running(delta: Int)
}
我嫌麻烦没写那么多类,只写了下简单逻辑,跟前面那位大佬的差不多,你随便看下就好