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

如何在Kotlin Android中计算数组平均值(代码求助)

解决方案

先看修正后的完整代码:

class MainActivity2 : AppCompatActivity() {
    private lateinit var addnumber: EditText
    private lateinit var storednumber: TextView
    private lateinit var output: TextView
    private lateinit var addbutton: Button
    private lateinit var clearbutton: Button
    private lateinit var averagebutton: Button
    private lateinit var minmaxbutton: Button
    
    // 新增成员变量,存储转换后的数值列表
    private var numbers: List<Double> = emptyList()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        addnumber = findViewById(R.id.et_addNum)
        storednumber = findViewById(R.id.stored_tv)
        output = findViewById(R.id.answer2_tv)
        addbutton = findViewById(R.id.addNum_btn)
        clearbutton = findViewById(R.id.clear_btn)
        averagebutton = findViewById(R.id.average_btn)
        minmaxbutton = findViewById(R.id.minMax_btn)

        addbutton.setOnClickListener {
            saveNumbers()
        }

        clearbutton.setOnClickListener {
            clear()
        }

        // 修正:把原来绑定到clearbutton的average()事件,改到averagebutton上
        averagebutton.setOnClickListener {
            calculateAverage()
        }
    }

    // 重命名函数更语义化,同时优化逻辑
    private fun saveNumbers() {
        val inputText = addnumber.text.toString().trim()
        if (inputText.isEmpty()) {
            storednumber.text = "请输入数字,用逗号分隔"
            numbers = emptyList()
            return
        }
        // 分割输入并转换为Double,过滤无效的数字
        numbers = inputText.split(",")
            .map { it.trim() }
            .filter { it.isNotEmpty() }
            .mapNotNull { it.toDoubleOrNull() }
        
        // 更新存储的数字显示
        storednumber.text = numbers.joinToString(", ")
        
        // 如果有无效输入,提示用户
        if (numbers.size != inputText.split(",").filter { it.trim().isNotEmpty() }.size) {
            Toast.makeText(this, "部分输入不是有效数字,已自动过滤", Toast.LENGTH_SHORT).show()
        }
    }

    private fun clear() {
        storednumber.text = ""
        output.text = ""
        addnumber.text.clear()
        numbers = emptyList()
    }

    // 实现平均值计算逻辑
    private fun calculateAverage() {
        if (numbers.isEmpty()) {
            output.text = "没有可计算的数字"
            return
        }
        val average = numbers.average()
        // 保留两位小数显示
        output.text = "平均值:%.2f".format(average)
    }
}

关键修改说明

  • 修正点击事件绑定:原代码错误地将average()绑定到clearbutton,现在改为绑定到averagebutton,匹配按钮功能逻辑。
  • 新增成员变量存储数值:添加private var numbers: List<Double> = emptyList()作为类成员,解决原代码中局部数组无法跨函数访问的问题,让存储和计算逻辑共享数据。
  • 优化输入处理逻辑:
    • 复用已初始化的addnumber变量,避免重复调用findViewById。
    • 处理空输入、无效数字的情况,用toDoubleOrNull()安全转换,避免崩溃,同时给用户提示。
    • 重命名原array()函数为saveNumbers,语义更清晰。
  • 实现平均值计算:
    • 先判断列表是否为空,避免除以0的错误。
    • 直接调用Kotlin标准库的average()方法计算平均值,简洁可靠。
    • 格式化输出结果,保留两位小数,显示更友好。

内容的提问来源于stack exchange,提问作者TevovoChin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:05:24