You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Kotlin的food列表中获取指定索引、名称及价格?

解决方案

你当前的问题有两个核心点:一是直接打印foodInfo对象会调用其默认toString()方法,输出完整的对象结构;二是用户输入的菜单编号是从1开始的,直接作为列表索引会导致索引越界(比如选1时会取food[1],对应菜单里的Burger而不是Pizza)。

修改后的完整代码:

data class foodInfo(
    val name: String,
    val price: Int
)

class Foods {
    private val food = mutableListOf(
        foodInfo("Pizza", 50000),
        foodInfo("Burger", 40000),
        foodInfo("Fried Rice", 40000),
        foodInfo("Noodle", 15000),
        foodInfo("Salad", 5000)
    )

    fun displayMenu() {
        food.forEachIndexed { index, foodInfo ->
            println("${index + 1}. ${foodInfo.name} =  ${foodInfo.price}/porsi")
        }
    }

    // 接收用户输入的1-based菜单编号,内部转成列表的0-based索引
    fun foodSelected(menuNumber: Int){
        val actualIndex = menuNumber - 1
        val selectedFood = food[actualIndex]
        // 自定义输出格式,提取需要的信息
        println("你选择了第 ${menuNumber} 号菜单:${selectedFood.name},价格 ${selectedFood.price}/porsi")
    }

    // 对外暴露菜单数量,用于输入校验
    fun getMenuCount() = food.size
}

fun main(){
    val foods = Foods()
    foods.displayMenu()
    print("Pick Menu: ")
    
    val selectMenu = readln().toInt()
    // 增加输入合法性校验,避免非法输入崩溃
    if (selectMenu in 1..foods.getMenuCount()) {
        foods.foodSelected(selectMenu)
    } else {
        println("无效的菜单编号,请输入1-${foods.getMenuCount()}之间的数字")
    }
}

关键修改说明:

  • 索引转换:将用户输入的1-based编号转成列表的0-based索引(menuNumber - 1),确保取到正确的菜单数据
  • 自定义输出:不再直接打印foodInfo对象,而是提取name和price属性,结合菜单编号拼接成需要的输出内容
  • 实例复用:main函数中只创建一个Foods实例,避免重复初始化菜单列表
  • 输入校验:增加范围判断,防止用户输入超出菜单数量的数字导致崩溃

内容的提问来源于stack exchange,提问作者ryhanhxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:35:15