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

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

修正逻辑说明

  1. 正确使用随机值:直接用生成的randomBoolean进行判断,不再读取TextView的初始空文本。
  2. 组数统计逻辑:用currentSequenceLength记录当前连续相同值的长度,当遇到不同值或行结束时,若长度≥2则对应组数+1(连续2个及以上才算1组)。
  3. 全局汇总:用两个变量累计所有行的true和false组数,最后统一显示结果,避免覆盖。
  4. 结果视图显示:将创建的textViewSum添加到tableLayout,确保统计结果能在界面上展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:17:02