Kotlin中能否通过数组获取用户输入?求更多实现方案
Kotlin中收集用户输入的多种实现方法
当然可以用数组直接收集用户输入,除了你已经实现的ArrayList方式,这里提供几种不同风格的实现方案:
1. 使用固定大小的Array(原生数组)
如果提前知道输入数量,直接创建指定大小的Array来存储输入,逻辑和你原有代码类似,但直接用数组而非集合:
import java.util.Scanner fun main() { val scanner = Scanner(System.`in`) println("Enter the number of inputs: ") val inputCount = scanner.nextInt() // 创建指定大小的Int数组 val inputArray = Array(inputCount) { 0 } for (i in 0 until inputCount) { print("Enter input ${i + 1}: ") inputArray[i] = scanner.nextInt() } println("The array is: ${inputArray.contentToString()}") }
这里用Array(inputCount) { 0 }初始化数组,循环时直接通过索引赋值,最后用contentToString()打印数组(Kotlin数组直接用toString()无法得到友好输出)。
2. 用Kotlin标准库的buildList简化ArrayList实现
你原来的ArrayList写法可以用buildList简化,无需手动调用add,代码更简洁:
import java.util.Scanner fun main() { val scanner = Scanner(System.`in`) println("Enter the number of inputs: ") val inputCount = scanner.nextInt() val inputList = buildList<Int> { repeat(inputCount) { index -> print("Enter input ${index + 1}: ") add(scanner.nextInt()) } } println("The list is: $inputList") }
buildList是Kotlin提供的构建只读List的便捷函数,内部自动管理集合,配合repeat替代for循环,更符合Kotlin的简洁风格。
3. 函数式风格:用generateSequence生成输入序列
如果偏好函数式编程,可以用generateSequence不断生成输入,再取前n个元素转成集合或数组:
import java.util.Scanner fun main() { val scanner = Scanner(System.`in`) println("Enter the number of inputs: ") val inputCount = scanner.nextInt() // 生成输入序列,取前inputCount个元素 val inputList = generateSequence { print("Enter next input: ") scanner.nextInt() }.take(inputCount).toList() println("The list is: $inputList") // 如果需要数组,直接转成Array:.toTypedArray() }
这种写法无需手动管理循环,用序列处理输入,适合函数式编程场景。
对你原有代码的小优化
你的原有代码可以做细节优化,比如变量命名更清晰,去掉多余的变量声明:
import java.util.Scanner fun main() { val scanner = Scanner(System.`in`) println("Enter an number of input: ") val n = scanner.nextInt() val inputList = ArrayList<Int>() for (i in 1..n) { print("enter an input of $i :") inputList.add(scanner.nextInt()) } println("the list is:$inputList") }
这里把n1改成scanner更易读,去掉了提前声明的var i=0,因为for循环里的i会自动创建作用域。
内容的提问来源于stack exchange,提问作者prasad
相关产品推荐
相关产品推荐

