查看库存
本课属于 Coddy Kotlin 学习旅程的“逻辑与流程”单元。第 57 课,共 63 课。
挑战
困难完成 runInventory,参数为 commands: List<String>。每次调用函数时,都创建一个空库存。每条命令都是一个字符串,字段之间用 | 分隔。物品名称是小写 ASCII 单词。命令最多有 100 条。按字面分隔符拆分每条命令;每种操作的命令字段数始终正确。每条命令都返回一条回复。解析前要去除数量两端的空白;有效数量在 0 到 1000 之间。无效数字文本、超出 Int 范围的文本、负数或大于 1000 的数量,都会产生 invalid,且不改变状态。保留你在前面步骤中编写的所有内容,包括之前的每条命令和回复。支持 ADD|item|quantity:将有效数量加到该物品的库存中,库存初始为零,并回复 added。添加零仍会创建该物品。添加 GET|item:以字符串形式回复该物品的数量;如果物品不存在,则回复 0。输入只使用此步骤支持的操作。
除非上文规定了更严格的范围,否则每一层集合最多包含 100 个元素,整数参数和集合中的整数值都在 -1000 到 1000 之间。提供用于解析的文本可能包含无效或超出范围的表示形式,如上所述。
返回一个 List<String> 类型的值。保留提供的输入/输出代码。它每行读取一个标量参数;列表以元素数量开头,后面跟着各个元素;映射以条目数量开头,后面依次跟着每个键和值。嵌套列表的每一行都重复使用数量加元素的格式。提供的 main 会打印返回值,后面跟一个换行符。列表使用 Kotlin 的标准方括号格式;不要打印额外的标签。
亲手试试
fun runInventory(commands: List<String>): List<String> {
val stock = mutableMapOf<String, Int>()
val replies = mutableListOf<String>()
for (command in commands) {
val parts = command.split("|")
val operation = parts[0]
val item = if (parts.size > 1) parts[1] else ""
when (operation) {
"ADD" -> {
val amount = parts[2].trim().toIntOrNull()
if (amount == null || amount !in 0..1000) replies.add("invalid")
else {
stock[item] = (stock[item] ?: 0) + amount
replies.add("added")
}
}
}
}
return replies
}
fun main() {
val commandsCount = readln().toInt()
val commands = mutableListOf<String>()
for (i0 in 0 until commandsCount) {
val commandsItem = readLine().orEmpty()
commands.add(commandsItem)
}
println(runInventory(commands))
}逻辑与流程中的所有课
自己练习: Kotlin 在线编辑器