Kotlin 函数不会返回 false,当期望 false 时不返回任何内容

问题描述 投票:0回答:1
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
}

无法让该函数返回 false。它返回 true 或不返回任何内容。我希望它返回 false,这样当它返回 false 时我可以检查其他行。我哪里做错了?我收到“ArrayIndexOutOfBoundsException”而不是错误。但当它是真的时,也不例外。

function loops kotlin boolean return
1个回答
0
投票

当您尝试为索引小于 0 或大于其 {size minus 1} 的数组建立索引时,就会发生

ArrayIndexOutOfBoundsException
。在您的情况下,循环正确地遍历了
helped_answer
的所有有效索引,因此这不是问题的根源。唯一剩下的可能性是
ViewGroup.getChildAt
抛出异常,因为您向其传递了无效的索引值。

请注意,您传递给

getChildAt
的索引在循环内不会变化;因此,为了清晰和可读性,将其放在循环之外会有所帮助。

考虑如果将不正确的索引传递给您的

check_letter_row
函数应该做什么。它应该抛出异常、返回 true 还是返回 false?这只有您可以决定,具体取决于您想如何使用此功能。

尝试以下操作,其功能与您的原始代码相同:

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

    if (i !in 0..v.getChildCount() - 1) {
        // TODO: decide what to do here. Example:
        return false // or throw IllegalArgumentException
    }

    val childView = v.getChildAt(i)
    val childViewTag = childView.tag.toString().lowercase()
    helped_answer = helped_answer.lowercase()

    if (childViewTag.length == 1 && childViewTag in helped_answer) {
        childView.visibility = View.GONE
        return true
    }
    return false
}
© www.soinside.com 2019 - 2024. All rights reserved.