如何通过用户输入获取Kotlin枚举类中的对应元素?
Kotlin通过用户输入字符串获取枚举元素属性值
你直接用Dir.choice的写法是错误的——choice是运行时的局部字符串变量,Kotlin不支持通过这种动态变量名的方式访问枚举成员。要实现通过用户输入获取对应枚举元素的属性,得用枚举类自带的valueOf方法,同时处理输入与枚举名称的匹配问题。
解决方案
首先建议统一枚举元素的命名规范(通常枚举用全大写),这样可以兼容用户输入的大小写差异:
enum class Dir(val dx: Int = 0, val dy: Int = 0) { UP(0, -1), DOWN(0, 1), LEFT(-1, 0), RIGHT(1, 0) }
然后在主函数中处理用户输入,通过valueOf获取枚举实例并访问属性:
fun main() { val choice = readln().trim().uppercase() try { val selectedDir = Dir.valueOf(choice) println("(${selectedDir.dx}, ${selectedDir.dy})") } catch (e: IllegalArgumentException) { println("输入的方向无效,请输入UP/DOWN/LEFT/RIGHT") } }
关键说明
uppercase()将用户输入转为全大写,确保和枚举元素名称完全匹配Dir.valueOf(choice)根据字符串获取对应的枚举实例,字符串必须与枚举元素名称严格一致,否则会抛出IllegalArgumentException,所以用try-catch处理无效输入- 拿到枚举实例后,直接访问
dx和dy属性即可输出预期的坐标值
如果坚持保留原枚举的命名(如UP、Down、Left、Right),则需要让用户输入的字符串与枚举名称完全一致(比如输入Down才能匹配),此时去掉uppercase()即可,但这种方式对用户输入的要求更严格,不推荐。
内容的提问来源于stack exchange,提问作者Bernardo Martins
相关产品推荐
相关产品推荐

