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
相关产品推荐
相关产品推荐

