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

Kotlin中使用随机范围运算符时如何避免生成重复数字?

实现方案

核心逻辑是通过记录已返回的数值,避免重复返回。推荐采用「预生成乱序序列+按序取用」的方案,实现简单、性能稳定,天然避免重复值问题。

优化后的实现代码

class RandomImageLogic() {
    // 存储待返回的乱序数字队列
    private val remainingNumbers = ArrayDeque<Int>()

    fun retrive(): Int {
        // 队列空时(所有数字已经返回过一轮),重新生成1-9的乱序序列填充队列
        if (remainingNumbers.isEmpty()) {
            remainingNumbers.addAll((1..9).shuffled())
        }
        // 取出队列第一个元素返回,同一轮内绝对不会重复
        return remainingNumbers.removeFirst()
    }
}

逻辑说明

  • 第一次调用方法时才会生成乱序的1-9数字队列,避免不必要的性能消耗
  • 每轮调用会依次从队列头部取数,同一轮内不会出现重复值,完全满足每次返回不同整数的需求
  • 9个数字全部返回完毕后,下次调用会自动生成新的乱序序列,进入下一轮不重复返回,不需要手动重置

如果不需要自动重置,比如9个数字用完后不需要再返回新值,可以修改为返回可空类型:

// 无自动重置版本,数字全部返回后返回null
class RandomImageLogic() {
    private val remainingNumbers = ArrayDeque<Int>((1..9).shuffled())

    fun retrive(): Int? {
        return if (remainingNumbers.isNotEmpty()) remainingNumbers.removeFirst() else null
    }
}

注:原代码中的方法名retrive为拼写错误,正确拼写为retrieve,可按需修正。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:09:03