如何在Kotlin统计计算器中获取数组的最大值与最小值?
Kotlin统计计算器:获取输入数组的最大值与最小值
现有代码的问题
- 平均值计算按钮(
avgBut)用了固定测试数组,没有对接用户实际输入的values列表 - 最值计算按钮(
minmaxBut)里的自定义查找函数完全没必要,内部的main函数是无效测试代码,没用到用户输入的数值 - 数组显示用循环拼接字符串,代码冗余且效率低
- 没处理非数字输入的情况,容易导致程序崩溃
修正后的完整实现
直接用Kotlin标准库的原生方法获取最值,同时优化整体逻辑:
// 存储用户输入的数值列表 var values = ArrayList<Int>() addButt.setOnClickListener { // 安全转换输入为整数,避免非数字输入崩溃 val inputNum = statNum.text.toString().toIntOrNull() inputNum?.let { num -> values.add(num) statNum.setText("") // 用joinToString快速拼接数组元素 statArray.text = values.joinToString(", ") } } avgBut.setOnClickListener { if (values.isEmpty()) { finalAnswer.text = "请先输入数值" return@setOnClickListener } // 计算平均值,转Double避免整数除法误差 val average = values.sum().toDouble() / values.size finalAnswer.text = "平均值: %.2f".format(average) } minmaxBut.setOnClickListener { if (values.isEmpty()) { finalAnswer.text = "请先输入数值" return@setOnClickListener } // 直接调用标准库方法获取最值 val minVal = values.minOrNull() val maxVal = values.maxOrNull() finalAnswer.text = "最小值: $minVal,最大值: $maxVal" }
核心优化说明
- 安全输入处理:
toIntOrNull()替代toInt(),遇到非数字输入时自动忽略,不会崩溃 - 高效取最值:
minOrNull()和maxOrNull()是Kotlin集合原生方法,一次遍历就能得到结果(时间复杂度O(n)),比排序后取首尾(O(nlogn))效率更高 - 简化字符串拼接:
joinToString()直接把集合元素拼成指定格式的字符串,代码更简洁 - 空状态防护:增加空列表判断,避免出现除以0或空值显示的异常
内容的提问来源于stack exchange,提问作者Effected Pringle
相关产品推荐
相关产品推荐

