感谢@RedBassett 提供此资源(Kotlin 问题解决):https://kotlinlang.org/docs/tutorials/koans.html
我知道这里存在这个问题:
Creating a 4 digit Random Number using java with no repetition in digits
但我是 Kotlin 的新手,想探索直接的 Kotlin 功能。 因此,正如标题所暗示的那样,我正在尝试找到一种 Kotlin 特定的方法来很好地解决生成一个 4 位数字(之后很容易使其适应长度 x)而不重复数字。
这是我目前的工作解决方案,我想让它更像 Kotlin。非常感谢您提供一些意见。
fun createFourDigitNumber(): Int {
var fourDigitNumber = ""
val rangeList = {(0..9).random()}
while(fourDigitNumber.length < 4)
{
val num = rangeList().toString()
if (!fourDigitNumber.contains(num)) fourDigitNumber +=num
}
return fourDigitNumber.toInt()
}
最佳答案
因此您定义的范围 (0..9
) 实际上已经是一个数字序列。您可以只使用该序列的一个子集,而不是迭代和重复生成一个新的随机数。事实上,this is the accepted answer's solution to the question you linked .如果您想自己实现它以进行练习,这里有一些建议:
由于范围的原因,该解决方案中的第一个
for
循环在 Kotlin 中是不必要的。0..9
做同样的事情,你在正确的轨道上。在 Kotlin 中,您可以直接在范围上调用
.shuffled()
,而无需像他们那样使用参数调用Collections.shuffle()
。如果您从整个范围创建一个字符串然后返回一个子字符串,则可以避免另一个循环。
如果你想看看我的解决方案(评论中有其他人的意见),它在此处剧透:
有趣的 getUniqueNumber(length: Int) = (0..9).shuffled().take(length).joinToString('')
(请注意,这不能很好地处理超过 10 的长度,但这取决于您如何实现。您可以使用 subList()
然后使用 toString()
,或者toString()
,然后是substring()
,输出应该是一样的。)
关于kotlin - 在 Kotlin 中创建没有重复元素的 4 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60997363/