如何生成随机数,使每个数字只出现一次



我想在点击按钮时生成随机数,每个随机数只出现一次。现在,我有一个数组,我在其中存储所有生成的数字,这样我就可以检查这个数字以前是否生成过。然而,在这种情况下,我希望它生成另一个以前没有生成的数字。我一直在努力,但找不到合适的代码。

var arraylist = ArrayList<Int>()
nextnumberbutton.setOnClickListener {
val rand = java.util.Random().nextInt(75)
if (arraylist.contains(rand)) {
kotlin.run { nextnumberbutton }
} else {
numbertextview.text = rand.toString()
}
arraylist.add(rand)
}

run { nextnumberbutton }什么都不做。这是一个lambda,它将简单地返回Unit。

假设您在发现重复的号码时再次调用了click监听器,那么您仍然会再次将该号码添加到列表中,因为您不会提前从函数返回。因此,你的列表中会出现重复项。

您的策略可以使用while循环来完成,而不是在选择重复时再次调用整个函数。例如,您可以使用while (rand !in arrayList) rand = Random.nextInt(75)。然而,当你接近值的极限时,选择数字可能需要越来越长的时间,因为这只是猜测数字,如果已经选择了数字,就必须再试一次。

一个更好的策略是从一组所有的数字开始,并在进行时从这组数字中删除。您还需要处理何时拾取所有数字的情况,可能是通过向用户显示消息。

val unpickedNumbers = (0..75).toMutableSet()
nextnumberbutton.setOnClickListener {
if (unpickedNumbers.isEmpty()) {
Toast.makeText(context, "All numbers already picked", Toast.LENGTH_LONG).show()
return
}
val rand = unpickedNumbers.random()
numbertextview.text = rand.toString()
unpickedNumbers.remove(rand)
}

最新更新