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

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("")
        }
    }
}

修正说明:

  1. 用MutableList<Int>作为类成员变量,支持动态添加数字,避免数组长度固定的限制;
  2. 初始化所有视图成员,避免重复查找视图;
  3. 对输入文本做空格处理,兼容用户输入带空格的情况;
  4. 用try-catch捕获数字转换异常,防止App崩溃;
  5. 添加空输入判断和错误提示,提升用户体验;
  6. 补充清空按钮的逻辑,方便重置存储的数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:25:36