每次我重新启动应用程序时,Kotlin- Random都给出相同的结果

9nvpjoqh  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(148)

我有一个简单的应用程序,它应该从数组中生成一个随机字符串。现在发生的是,当我启动应用程序时,每次都得到相同的结果。它发生在模拟器和真实的设备上。
现在我在互联网上发现了不同的东西。有人说这是一个bug,有人说这是默认的。还有人说你应该设置一个随机种子,但我该怎么做呢?
我如何修复这个问题,以确保我每次都得到不同的字符串。
这是我的代码:

class SmarttechtransKaartActivity : AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_smarttechtrans_kaart)

val Carts = arrayOf("" +
                "1. goobzrort",

            "2. yweagS",

            "3. ikhrescelte toau",

            "4. erecksliteh daeltoue",

            "5. jzdrfnlieed vrutioeg",

            "6. itdnrre-3p",

            "7. rp-i4rtedn",

            "8. edron",

            "9. uenkifser",

            "10. ligeovdl srehelikct cihps",

            "11. smigakuetnt eiitelltnegni",

            "12. dlnwoemin",

            "13. bnaardknsepiige",

            "14. dR-coQe",

            "15. aadt",

            "16. nlicohkabc",

            "17. enokeciosninem",

            "18. iuhitlm nio eraibjtt",

            "19. tnaueoozn",

            "20. mstartawch",

            "21. bRlrV-i",

            "22. tirtenne",

            "23. ecaram",

            "24. ldelpma",

            "25. rbotorstufieogz",

            "26. miasceuothta sreagrimaa",

            "27. emslmi tatmtrohsae",

            "28. tpasdoc",

            "29. rerirfya",

            "30. eradoazld drealpo",

            "31. creietttiilek",

            "32. GSP",

            "33. ntoiibc",

            "34. rnttInee of Tighsn",

            "35. egevrselnearvv",

            "36. citsrhbieeom tnenoatlgcegosro",

            "37. ezdmurua reeieng",

            "38. tiajtreibbo",

            "39. ayesnietetvimags",

            "40. udtsomeinre",

            "41. koeoebrntuk",

            "42. geatmednu aeytlri",

            "43. thootelbu",

            "44. gnfaree",

            "45. cvreleati nudbwola",

            "46. semlmi olksatek",

            "47. nosrse",

            "48. terabee sesonr lpi",

            "49. oormlhag",

            "50. ibg adat",
            )

button.setOnClickListener() {
val random = Carts.random()
tvvoorkant.setText(random)
}

}
}

更新!修复:

button.setOnClickListener {

//OLD: Gets same result on relaunch app...
val random = Carts.random()

textview.text = randomValue

//NEW: Gets different result on relaunch app...
val randomString = Random(System.currentTimeMillis())
val randomValue = Carts[randomString.nextInt(Carts.size)]

textview.text = randomValue
nhhxz33t

nhhxz33t1#

关于随机值,您需要了解的一件重要事情是,它们不是随机的,它们是伪随机的
计算机不能产生随机值。它所做的是产生一个巨大的数字序列,这些数字看起来是随机的,但最终会重复。这就是种子产生相关性的地方
您通常会看到人们创建Random示例并使用它给出的值,就好像这些值是随机的一样,但由于它使用的种子总是相同的,因此伪随机值的序列也总是相同的
对于“真正的”随机值,每次都需要提供不同的种子。

**请注意,我现在没有IDE,因此语法可能不准确。您可以依靠自动完成功能来获得正确的语法
更新

好的,我查看了文档。看一下Random docs,它可以创建一个带有自定义种子的新Random示例,random extension function可以在数组中使用它,getTimeMillis可以为Random示例获取唯一的种子

相关问题