我有一个问题,如何防止随机数重复。顺便问一下,谁能给我解释一下如何对这些随机数进行排序?
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView = findViewById<TextView>(R.id.textView)
val button = findViewById<Button>(R.id.buttom)
button.setOnClickListener {
var liczba = List(6){Random.nextInt(1,69)}
textView.text = liczba.toString()
}
}
6条答案
按热度按时间beq87vna1#
有三种基本方法可以避免重复的“随机”数字。如果它们不重复,那么它们当然不是真正的随机。
8dtrkrch2#
Sequences是生成数据流并限制或过滤结果的好方法。
run in Kotlin Playground
为了确保这一点,下面使用Kotest进行一个基于属性的测试。
测试通过!
fdx2calv3#
cwdobuhd4#
我创建了一个简单类,在构造函数中输入“from”数字(最小可能数字)和“to”(最大可能数字),类创建数字列表。“nextInt()”从集合中返回随机项并将其删除。
使用方法:
8fq7wneg5#
与@IR42的答案类似,您可以执行以下操作
因此
getUniqueRandoms
创建了一个独立的序列,并保存了它自己的内部状态,即它产生的数字。对于调用者来说,它只是一个产生唯一值的基本序列,你可以随意使用这些值。就像@rossum说的,这取决于你要产生多少--如果你产生了很多,或者这个序列真的很长,那么随着时间的推移,这组可见的数字会变得非常大。另外,随着碰撞越来越多,它会开始变慢,你必须不断尝试找到一个还没有被看到的。
但是对于大多数情况,这种情况是很好的--如果你要产生数百万个数字,你可能会想对它进行基准测试,但是对于像6这样的数字,甚至不值得担心!
6fe3ivhb6#
您可以使用Set和MutableSet来代替List: