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

Kotlin函数无法返回false,触发数组越界异常问题排查

Kotlin函数异常分析与修复

问题代码

private fun check_letter_row(v:ViewGroup, i: Int):Boolean {

    helped_answer = helped_answer.lowercase()

    for (a in 0..helped_answer.length - 1) {
        if (v.getChildAt(i).tag.toString().lowercase() == helped_answer[a].toString()) {
            v.getChildAt(i).visibility = View.GONE
            return true
        }
    }
    return false
}

问题根源

  1. ArrayIndexOutOfBoundsException 触发原因
    传入的参数i超出了ViewGroupv的子元素索引范围。ViewGroup的子元素索引从0到v.childCount - 1,如果i >= v.childCount,调用v.getChildAt(i)会触发索引越界异常,此时函数直接崩溃,无法走到最后的return false逻辑。

  2. 无法返回false的原因
    函数只有两种执行路径:要么在循环中找到匹配项返回true,要么触发异常终止执行,永远走不到循环结束后的return false。

修复方案

private fun check_letter_row(v:ViewGroup, i: Int):Boolean {
    // 先校验i的合法性,避免越界
    if (i < 0 || i >= v.childCount) {
        return false
    }

    // 处理tag为空的情况,避免空指针
    val targetTag = v.getChildAt(i).tag?.toString()?.lowercase() ?: return false
    // 用局部变量存储小写结果,不修改全局变量
    val lowerCaseAnswer = helped_answer.lowercase()

    // 直接遍历字符,替代索引循环更简洁安全
    for (char in lowerCaseAnswer) {
        if (targetTag == char.toString()) {
            v.getChildAt(i).visibility = View.GONE
            return true
        }
    }
    return false
}

修复说明

  • 增加i的范围校验:超出合法索引直接返回false,避免异常。
  • 空安全处理tag:如果tag为null,直接返回false,避免空指针崩溃。
  • 避免修改全局变量:将helped_answer的小写结果存为局部变量,防止影响其他逻辑。
  • 简化循环逻辑:直接遍历字符串字符,替代索引循环,减少出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:32:15