Создание номера 4 di git без повторяющихся элементов в Kotlin - PullRequest
2 голосов
/ 02 апреля 2020

Спасибо @RedBassett за этот ресурс (Kotlin решение проблем): https://kotlinlang.org/docs/tutorials/koans.html

Мне известно, что этот вопрос существует здесь:

Создание 4 di git Случайного числа с использованием java без повторения в цифрах

, но я новичок в Kotlin и хотел бы изучить прямые функции Kotlin. Итак, как следует из заголовка, я пытаюсь найти Kotlin конкретный c способ, чтобы красиво решить сгенерировать число 4 di git (после этого легко сделать его адаптируемым для длины 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()
}

1 Ответ

2 голосов
/ 02 апреля 2020

Таким образом, диапазон, который вы определяете (0..9), на самом деле уже является последовательностью чисел. Вместо того, чтобы повторять и повторно генерировать новое случайное число, вы можете просто использовать подмножество этой последовательности. На самом деле, - это принятое решение для ответа на вопрос, который вы связали . Вот несколько советов, если вы хотите реализовать это самостоятельно, чтобы получить практику:

  • Первые for l oop в этом решении не нужны в Kotlin из-за диапазона , 0..9 делает то же самое, вы на правильном пути.

  • В Kotlin вы можете позвонить .shuffled() прямо в диапазоне без необходимости звонить Collections.shuffle() с аргументом, как они делают.

  • Вы можете избежать другого l oop, если создадите строку из всего диапазона, а затем вернете подстроку.

Если вы хотите посмотреть на моё решение (с комментариями других пользователей), оно здесь в спойлере:

(Обратите внимание, что это не изящно обрабатывает длину выше 10, но это зависит от вас, чтобы выяснить, как реализовать. Вы должны использовать subList() и затем toString(), или toString(), а затем substring(), вывод должен быть таким же.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...