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”而不是错误。但当它是真的时,也不例外。
当您尝试为索引小于 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
}