问题描述
感谢您的帮助。 我一直在做一个课程项目,在这个项目中,我必须制造一个停车场来登记汽车。当我在IDE中使用它时,它可以正常工作,但是当我在平台测试中运行它时,在第一个测试中就没有问题,但是当第二次迭代达到“ ”时(val命令= Scanner.next()) ”在 createOrder 乐趣中,它崩溃并显示错误:
java.lang.AssertionError: Exception in test #1
Probably your program run out of input (Scanner tried to read more than expected).
java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at parking.ParkingLot.createOrder(Main.kt:39)
at parking.ParkingLot.start(Main.kt:31)
at parking.MainKt.main(Main.kt:6)
at parking.MainKt.main(Main.kt)
Please find below the output of your program during this Failed test.
Note that the '>' character indicates the beginning of the input line.
---
> park KA-01-HH-1234 White
White car parked in spot 1.
想法是该测试输入了许多汽车,但是在尝试进行第二次输入时却崩溃了
import java.util.*
fun main() {
ParkingLot.start()
}
class Car(val regNumber: String = "",val color: String = "") {
}
class Order(val command: String) {
lateinit var regNum: String
lateinit var color: String
lateinit var spot: String
lateinit var status: String
}
object ParkingLot {
val spaces: Array<Pair<String?,Car?>> = Array(20) { Pair(null,null) }
const val occupied = "occupied"
const val park = "park"
const val leave = "leave"
const val exit = "exit"
fun start() {
val scanner = Scanner(System.`in`)
do {
val order = createOrder(scanner)
interaction(order,scanner)
} while (order.command != exit)
}
fun createOrder(scanner: Scanner): Order {
when (val command = scanner.next()) {
park -> {
val parkOrder = Order(command)
parkOrder.regNum = scanner.next()
parkOrder.color = scanner.next()
parkOrder.status = "valid"
return parkOrder
}
leave -> {
val retrieveOrder = Order(command)
retrieveOrder.spot = scanner.next()
retrieveOrder.status = "valid"
return retrieveOrder
}
exit -> {
val exitOrder = Order(command)
exitOrder.status = "valid"
return exitOrder
}
else -> {
val incorrectOrder = Order(command)
incorrectOrder.status = "invalid"
return incorrectOrder
}
}
}
fun interaction(order: Order,scanner: Scanner) {
if (order.command == park) {
// val toParkCar = Car(order.regNum,order.color)
park(Car(order.regNum,order.color))
}
if (order.command == leave) {
leave(order)
}
if (order.command == exit) return
//Todo update the error msg to include exit command
if (order.status == "invalid") println("\"${order.command}\" isn't a valid,either use \"park\" or \"leave\"")
// scanner.close()
}
fun park(car: Car) {
for ((index,item) in spaces.withIndex()) {
if (item.first == null) {
spaces[index] = Pair(occupied,car)
println("${car.color} car parked in spot ${index + 1}.")
return
}
}
println("Sorry,the parking lot is full.")
}
fun leave(order: Order) {
if (spaces[order.spot.toInt() - 1].first == occupied) {
spaces[order.spot.toInt() - 1] = Pair(null,null)
println("Spot ${order.spot} is free.")
} else {
println("There is no car in spot ${order.spot}.")
}
}
}
解决方法
好,所以我注意到JetBrains插件有问题。我不知道为什么,但是解决方案是将扫描仪从功能中移出并直接进入主循环。