停车场项目错误:使用扫描仪时 NoSuchElementException

问题描述

感谢您的帮助。 我一直在做一个课程项目,在这个项目中,我必须制造一个停车场来登记汽车。当我在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插件有问题。我不知道为什么,但是解决方案是将扫描仪从功能中移出并直接进入主循环。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...