我在从几个列表(字符串和整数)中获取和返回随机元素时遇到了一些麻烦。问题是每次我运行代码时,这些值确实是随机的。但是对于相同方法的连续调用,值是相似的。
我已将代码缩减为重要部分,因此此处的示例中不包含类定义、导入等。
lonnsinntekter2 += TestsakDataBuilder.createInntekt(
fnr = fnr, arbeid = TestsakDataBuilder.createArbeid()
fun createArbeid(arbeidsgiver: String = randomArbeidsgiver, stillingsprosent: Int =
randomStillingsprosent,
erStillingFast: Boolean = HelperUtils.getRandomBoolean()): Arbeid {
return Arbeid.builder()
.arbeidsgiver(arbeidsgiver)
.stillingsprosent(stillingsprosent)
.erStillingFast(erStillingFast)
.build()
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码中调用的randomArbeidsgiver和randomStillingsprosent方法:
val randomArbeidsgiver = listOf("Snusk & Fransen AS", "Humbug Elektro AS", "Hummer & Kanari ANS",
"REMA1000", "Meny", "Gaukern på hjørnet", "Equinor", "Ad Libris").random()
val randomStillingsprosent = listOf(50, 60, 70, 80, 90).random()
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?是列表的 .random() 函数在编译时选择值,而不是每次调用时选择值吗?
random()仅在您的每个变量和程序启动时调用一次。之后,您可以使用已分配的值。randomArbeidsgiverrandomStillingsprosent
如果您想在每次createArbeid调用时检索新的随机元素,您可以像这样将列表创建与随机元素检索分离:
val arbeidsgiverList = listOf("Snusk & Fransen AS", "Humbug Elektro AS", "Hummer & Kanari ANS", "REMA1000", "Meny", "Gaukern på hjørnet", "Equinor", "Ad Libris")
val stillingsprosentList = listOf(50, 60, 70, 80, 90)
fun createArbeid(
arbeidsgiver: String = arbeidsgiverList.random(),
stillingsprosent: Int = stillingsprosentList.random(),
...
): Arbeid { /* ... */}
Run Code Online (Sandbox Code Playgroud)