如何在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
相关产品推荐
相关产品推荐

