Kotlin TableView相邻布尔值统计错误,请求技术支持
问题修复:TableView横向相邻相同布尔值组数统计错误
原代码核心问题
- 值获取时机错误:在设置TextView文本前调用
textView.text.toString(),得到的是空字符串,完全未使用生成的随机布尔值。 - 统计逻辑混淆:需求是统计「相邻相同的组数」(比如3个连续true算1组),但原代码在累计连续数量,且每次覆盖TextView文本,仅显示最后一行的局部结果。
- 未汇总全局统计:每行结束后直接重置统计变量,未将该行的有效组数累加到全局统计中。
- 结果视图未添加到布局:创建的
textViewSum未加入tableLayout,无法显示。
修正后的完整代码
private fun findInTable(n: Int) { tableLayout = findViewById(R.id.tableLayout) tableLayout.removeAllViews() var totalTrueGroups = 0 // 累计所有行的true相邻组数 var totalFalseGroups = 0 // 累计所有行的false相邻组数 val tfSum = findViewById<TextView>(R.id.sonuc2) for (i in 1..n) { val tableRow = TableRow(this) var previousBoolean: Boolean? = null // 记录当前行的上一个布尔值 var currentSequenceLength = 1 // 当前连续相同值的长度 for (j in 1..n) { val textView = TextView(this) val randomBoolean = (0..1).random() == 1 textView.text = randomBoolean.toString() tableRow.addView(textView) // 从第二个元素开始对比相邻值 previousBoolean?.let { prev -> if (randomBoolean == prev) { currentSequenceLength++ } else { // 遇到不同值时,检查之前的连续序列是否符合组数要求 if (currentSequenceLength >= 2) { if (prev) totalTrueGroups++ else totalFalseGroups++ } currentSequenceLength = 1 } } previousBoolean = randomBoolean } // 每行结束后,检查最后一段连续序列是否符合组数要求 if (currentSequenceLength >= 2) { if (previousBoolean == true) totalTrueGroups++ else totalFalseGroups++ } tableLayout.addView(tableRow) } // 更新统计结果文本 tfSum.text = "横向相邻相同布尔值组数:\nTrue组:$totalTrueGroups\nFalse组:$totalFalseGroups" // 将结果视图添加到表格下方(根据布局需求可选) val textViewSum = TextView(this) textViewSum.gravity = Gravity.CENTER textViewSum.setPadding(16, 16, 16, 16) textViewSum.text = tfSum.text tableLayout.addView(textViewSum) }
修正逻辑说明
- 正确使用随机值:直接用生成的
randomBoolean进行判断,不再读取TextView的初始空文本。 - 组数统计逻辑:用
currentSequenceLength记录当前连续相同值的长度,当遇到不同值或行结束时,若长度≥2则对应组数+1(连续2个及以上才算1组)。 - 全局汇总:用两个变量累计所有行的true和false组数,最后统一显示结果,避免覆盖。
- 结果视图显示:将创建的
textViewSum添加到tableLayout,确保统计结果能在界面上展示。
内容的提问来源于stack exchange,提问作者mhmefe00
相关产品推荐
相关产品推荐

