Android Kotlin中如何通过EditText输入内容并存入数组
问题分析与修正方案
你的代码存在几个关键问题导致无法正确存储数字:
- 重复查找视图且未初始化成员变量:类中已声明
addnumber但未在onCreate中初始化,反而在点击事件里重复调用findViewById,冗余且易出错。 - 数组初始化逻辑不合理:
IntArray(text!!.length / 2)的假设过于局限,若输入多位数或无逗号的内容,会导致数组长度不足或浪费,甚至直接崩溃。 - 数字提取逻辑错误:
substring(0,1)仅能提取单个字符,多位数会被截断;- 若输入无逗号,
text.indexOf(",")返回-1,substring(0)会让文本永远不变,触发死循环和数组越界。
- 数组作用域错误:点击事件内声明的数组,方法执行完毕后就会销毁,无法保留之前添加的数字。
- 缺少异常处理:输入非数字内容时,
toInt()会抛出异常导致App崩溃。
修正后的代码(用MutableList替代数组,更灵活)
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 // 用MutableList动态存储数字,替代固定长度的数组 private val numberList = mutableListOf<Int>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main2) // 初始化所有视图,包括之前遗漏的addnumber 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 { // 获取输入文本并去除首尾空格 val inputText = addnumber.text.toString().trim() // 处理空输入 if (inputText.isEmpty()) { output.text = "请输入数字" return@setOnClickListener } // 按逗号分割输入,兼容用户输入带空格的情况(如"1, 2, 3") val numberStrings = inputText.split(",").map { it.trim() } for (numStr in numberStrings) { try { // 尝试转换为整数并添加到列表 val number = numStr.toInt() numberList.add(number) } catch (e: NumberFormatException) { // 提示无效输入,清空本次错误添加的内容 output.text = "输入无效:$numStr 不是有效数字" numberList.removeAll(numberStrings.mapNotNull { runCatching { it.toInt() }.getOrNull() }) return@setOnClickListener } } // 更新已存储数字的显示 storednumber.text = "已存储数字:${numberList.joinToString(", ")}" // 清空输入框 addnumber.setText("") output.text = "" } // 补充清空按钮的逻辑 clearbutton.setOnClickListener { numberList.clear() storednumber.text = "已存储数字:无" output.text = "" addnumber.setText("") } } }
修正说明:
- 用
MutableList<Int>作为类成员变量,支持动态添加数字,避免数组长度固定的限制; - 初始化所有视图成员,避免重复查找视图;
- 对输入文本做空格处理,兼容用户输入带空格的情况;
- 用
try-catch捕获数字转换异常,防止App崩溃; - 添加空输入判断和错误提示,提升用户体验;
- 补充清空按钮的逻辑,方便重置存储的数字。
内容的提问来源于stack exchange,提问作者TevovoChin
相关产品推荐
相关产品推荐

