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

Android Kotlin开发中无法向integerList添加随机数randIndex该如何解决

问题根因

  • 你声明的private var integerList: MutableList<Int>? = null仅做了可空类型声明,没有初始化实际的集合实例,执行integerList!!.contains()/add()时会直接抛出空指针异常,添加逻辑完全无法执行。
  • 额外优化点:每次循环都创建新的Random()实例属于冗余操作,全局复用一个即可。

修复方案

如果没有特殊需求,建议直接在声明集合时完成初始化,避免后续空指针风险,调整后代码如下:

// 声明时直接初始化非空集合,无需后续空判断
private val integerList: MutableList<Int> = mutableListOf()

private fun showSpinner() {
    var sv_mvmtChoosed = ""

    /* SCROLL VIEW */
    val linearLayout = findViewById<LinearLayout>(R.id.linear1)
    val layoutInflater = LayoutInflater.from(this)
    // 全局复用Random实例
    val rand = Random()

    for (i in sv_mvmtName) {
        var randIndex = rand.nextInt(40)
        while (integerList.contains(randIndex)) {
            randIndex = rand.nextInt(40)
        }
        integerList.add(randIndex)
        println("**** i = $i  *****  randIndex = $randIndex")
        // 原有后续逻辑
        ...
    }
}

如果确实有需要将integerList声明为可空的场景,在使用前先做非空初始化即可:

private var integerList: MutableList<Int>? = null

private fun showSpinner() {
    // 使用前先初始化集合,避免空指针
    if (integerList == null) {
        integerList = mutableListOf()
    }
    var sv_mvmtChoosed = ""

    /* SCROLL VIEW */
    val linearLayout = findViewById<LinearLayout>(R.id.linear1)
    val layoutInflater = LayoutInflater.from(this)
    val rand = Random()

    for (i in sv_mvmtName) {
        var randIndex = rand.nextInt(40)
        // 用let处理可空逻辑,避免重复使用!!
        integerList?.let { list ->
            while (list.contains(randIndex)) {
                randIndex = rand.nextInt(40)
            }
            list.add(randIndex)
        }
        println("**** i = $i  *****  randIndex = $randIndex")
        // 原有后续逻辑
        ...
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:54:03