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

如何在Kotlin统计计算器中获取数组的最大值与最小值?

Kotlin统计计算器:获取输入数组的最大值与最小值

现有代码的问题

  1. 平均值计算按钮(avgBut)用了固定测试数组,没有对接用户实际输入的values列表
  2. 最值计算按钮(minmaxBut)里的自定义查找函数完全没必要,内部的main函数是无效测试代码,没用到用户输入的数值
  3. 数组显示用循环拼接字符串,代码冗余且效率低
  4. 没处理非数字输入的情况,容易导致程序崩溃

修正后的完整实现

直接用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:16:10