【发布时间】:2020-11-11 00:20:15
【问题描述】:
感谢您的所有帮助。 我一直在做一个课程项目,我必须制作一个可以登记汽车的停车场。当我在我的 IDE 中使用它时它工作正常,但是当我通过平台测试运行它时,在第一个测试中,没有问题,但是当第二次迭代达到 "when (val command =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}.")
}
}
}
【问题讨论】:
-
您的代码是否包含产生“java.lang.AssertionError: Exception in test #1”的断言?通常,一个断言发生是为了告诉你一些具体的事情,因为它正在测试某事是真实的还是不真实的。如果您知道该断言在哪里失败,那么一条关键信息可能就是它所断言的内容……也就是说,断言语句中的布尔表达式是什么?如果您找到此断言代码,请将其添加到您的问题中。另外,您是否有该错误消息附带的堆栈跟踪?如果是这样,请在您的问题中提出。
-
好的,我将添加堆栈跟踪。如果这是一个愚蠢的问题,我很抱歉,但断言是什么,我怎样才能得到它?
-
语句“assert
”是您在代码中添加的内容,用于仔细检查您所做的假设。它们不会(或至少不应该)影响程序的逻辑。如果您对代码运行方式的假设是否真的不正确,它们会通知您。 -
您如何将输入输入到您的程序中。难道问题出在代码告诉你的……你没有给它足够的输入?
-
哦,好吧,我没有仔细检查。我确实用“scanner.hasNext()”尝试过,但它没有用。并且测试提供输入,我不确定它是如何做到的
标签: kotlin java.util.scanner nosuchelementexception