kotlin - 在 Kotlin 中创建没有重复元素的 4 位数字

标签 kotlin random

感谢@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/

相关文章:

android - 如何通过包含依赖项的 gradle 制作 jar

string - Golang 随机 Sha256

c++ - (C++) 如何生成一个七位数字,其数字相加等于七的倍数?

java - Kotlin 'when' 语句与 Java 'switch'

android - 使用 setOnClickListener 并获取“Potential NullPointerException。某些布局版本中缺少资源”

android - 指定为非空的参数在 ArrayAdaper 中为空

java - 安卓游戏开发: how to generate a map dynamically?

python - 在环内创建随机数

c# - C#中的随机数生成

Kotlin 和有区别的联合(求和类型)