gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:37:25 29 4
gpt4 key购买 nike

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

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 }不做任何事情。这是一个简单地返回 Unit 的 lambda。

假设您确实在找到重复号码时再次调用了单击监听器,您仍然会再次将该号码添加到列表中,因为您不会提前从函数中返回。因此,您最终会在列表中出现重复项。

您的策略可以通过 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)
}

关于android - 如何生成随机数,使每个数字只出现一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61409955/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com