Kotlin实现接收整型数组与lambda的minmax最值函数求助
问题说明
需要实现minmax函数,该函数接收两个入参:
- 整型数组
- 接收两个Int参数、返回Boolean类型的lambda比较逻辑
函数根据传入的lambda判断规则,返回对应数组的最小值或最大值。现有代码存在lambda赋值语法错误,且未实现minmax函数逻辑。
原错误代码
fun main(args: Array<String>) { val numsCount=readLine()!!.trim().toInt() val nums = Array<Int>(numsCount, {0}) for (i in 0 until numsCount) { val numsItem=readLine()!!.trim().toInt() nums[i] = numsItem } val type =readLine()!!.trim().toInt()!=0 var lambda= {a: Int, b: Int -> a>b} if(!type){ // 语法错误:此处是错误的函数调用写法,并非给lambda重新赋值 lambda {a: Int, b: Int -> a<b} // 逻辑错误:仅在type为false时执行计算和输出,type为true时无返回结果 val result = minmax(nums, lambda) println(result) } }
修复方案
错误点修正
- lambda重新赋值需要使用
=运算符,不能直接在变量后拼接lambda块做函数调用 - 实现
minmax核心逻辑:初始化候选极值为数组首元素,遍历数组所有元素,通过传入的比较lambda判断是否更新候选极值,遍历结束后返回结果 - 调整结果计算、输出的位置,保证两种比较逻辑下都能正常返回结果
完整可运行代码
fun minmax(nums: Array<Int>, comparator: (Int, Int) -> Boolean): Int { // 初始化极值为数组第一个元素 var target = nums[0] for (current in nums) { // 传入lambda返回true时,说明当前元素更符合极值要求,更新候选值 if (comparator(current, target)) { target = current } } return target } fun main(args: Array<String>) { val numsCount = readLine()!!.trim().toInt() val nums = Array<Int>(numsCount) { 0 } for (i in 0 until numsCount) { val numsItem = readLine()!!.trim().toInt() nums[i] = numsItem } val type = readLine()!!.trim().toInt() != 0 // 默认识别最大值的比较逻辑:当前值大于候选值时更新 var lambda: (Int, Int) -> Boolean = { a, b -> a > b } if (!type) { // 识别最小值的比较逻辑:当前值小于候选值时更新,赋值必须使用= lambda = { a, b -> a < b } } // 统一计算、输出结果 val result = minmax(nums, lambda) println(result) }
运行逻辑
- 当输入type为非0值时,使用
a > b比较逻辑,遍历过程中始终保留更大的元素,最终返回数组最大值 - 当输入type为0值时,使用
a < b比较逻辑,遍历过程中始终保留更小的元素,最终返回数组最小值
内容的提问来源于stack exchange,提问作者ばらす
相关产品推荐
相关产品推荐

