- Как я могу получить случайное число в Котлине?
- 17 ответов
- Как я могу получить случайное число в Котлине?
- Random
- Types
- Default
- Constructors
- Functions
- nextBits
- nextBoolean
- nextBytes
- nextDouble
- nextFloat
- nextInt
- nextLong
- Функции объекта-сопутника
- nextBits
- nextBoolean
- nextBytes
- nextDouble
- nextFloat
- nextInt
- nextLong
- Функции расширения
- asJavaRandom
- nextInt
- nextLong
- nextUBytes
- nextUInt
- nextULong
- Как я могу получить случайное число в Котлине?
- 15 ответов
- Котлин
- KotlinJs и другие варианты
- Котлин >= 1.3 мультиплатформенная поддержка случайных
Как я могу получить случайное число в Котлине?
Универсальный метод, который может возвращать случайное целое число между 2 параметрами, как ruby делает с rand(0..n) .
17 ответов
Стандартная библиотека Kotlin не предоставляет API генератора случайных чисел. Если вы не участвуете в мультиплатформенном проекте, лучше использовать платформу api (все остальные ответы на вопрос говорят об этом решении) .
Но если вы работаете в многоплатформенном контексте, лучшее решение — это реализовать в случайном порядке самостоятельно в чистом котлине для совместного использования одного и того же генератора случайных чисел между платформами. Это проще для разработчиков и тестирования.
Чтобы ответить на эту проблему в моем личном проекте, я использую чистый котлинский линейный конгруэнтный генератор. LCG — алгоритм, используемый java.util.Random . Перейдите по этой ссылке, если хотите ее использовать: https://gist.github.com/11e5ddb567786af0ed1ae4d7f57441d4
Моя цель реализации nextInt(range: IntRange) для вас;).
Позаботьтесь о моей цели, LCG подходит для большинства случаев использования (симуляторы, игры и т. Д.) , но не подходит для криптографического использования из-за предсказуемости этого метода.
Используя функцию верхнего уровня, вы можете получить тот же синтаксис вызова, что и в Ruby (по вашему желанию):
Всякий раз, когда возникает ситуация, когда вы хотите сгенерировать ключ или mac-адрес, который представляет собой шестнадцатеричное число с цифрами в зависимости от требований пользователя, а также с использованием android и kotlin, тогда вам поможет мой код ниже:
Во-первых, вам нужен RNG. В Kotlin вам в настоящее время нужно использовать платформо-зависимые (нет встроенного Kotlin). Для JVM это java.util.Random . Вам нужно создать его экземпляр, а затем вызвать random.nextInt(n) .
Больше не нужно использовать пользовательские функции расширения. IntRange имеет random() вне функции расширения Коробка сейчас.
Чтобы получить случайное число Int в Kotlin, используйте следующий метод :
Надеюсь это поможет.
Если числа, которые вы хотите выбрать, не являются последовательными, вы можете использовать random() .
Возвращает одно из чисел, которые есть в списке.
Создавая @ s1m0nw1 отличный ответ, я внес следующие изменения.
- (0..n) подразумевает включительно в Kotlin
- (От 0 до n) подразумевает исключение в Kotlin
- Используйте одноэлементный объект для экземпляра Random (необязательно)
Вы можете создать функцию расширения:
Значение Round Float:
значение: 0,0 значение: 0,1 значение: 0,2 значение: 0,3 значение: 0,4 значение: 0,5 значение: 0,6 значение: 0,7 значение: 0,8 значение: 0,9 значение: 1,0
Нет стандартного метода, который делает это, но вы можете легко создать свой собственный, используя Math.random() или класс java.util.Random . Вот пример использования метода Math.random() :
Это пример вывода:
Другим способом реализации ответа s1m0nw1 будет доступ к нему через переменную. Не то чтобы это более эффективно, но избавляет вас от необходимости печатать ().
И теперь к нему можно получить доступ как таковой
Создать случайное целое число между from (включительно) и to (исключительно)
Примеры случайных в диапазоне [1, 10]
Или используя Java Random
Полный исходный код. Может контролировать, разрешены ли дубликаты.
Быть супер пухлым))
В Kotlin 1.3 вы можете сделать это как
Начиная с версии 1.2, вы можете написать:
Просто знайте, что это большой O (n), но для небольшого списка (особенно уникальных значений) все в порядке: D
Источник
Как я могу получить случайное число в Котлине?
Общий метод, который может возвращать случайное целое число между двумя параметрами, такими как ruby, с rand(0..n)
Создайте случайное целое число from (включительно) и to (исключительного)
Я рекомендую использовать следующую функцию расширения :
используйте его вот так:
Если вы работаете с JDK> = 1.7, используйте ThreadLocalRandom.current() вместо Random() .
Также см. Этот ответ для вариантов.
Вы можете создать функцию расширения, похожую на java.util.Random.nextInt(int) но IntRange которая принимает IntRange вместо Int для своей привязки:
Теперь вы можете использовать это с любым экземпляром Random :
Если вы не хотите управлять своим собственным экземпляром Random то вы можете определить метод удобства, используя, например, ThreadLocalRandom.current() :
Теперь вы можете получить случайное целое число, как в Ruby, без необходимости сначала объявлять Random экземпляр самостоятельно:
Исходя из превосходного ответа @ s1m0nw1, я внес следующие изменения.
- (0..n) подразумевает включение в Котлин
- (От 0 до n) подразумевается эксклюзивный в Котлине
- Используйте одноэлементный объект для экземпляра Random (необязательно)
Во-первых, вам нужен RNG. В Котлине вам в настоящее время нужно использовать специфичные для платформы (в одном из них нет котлина). Для JVM это java.util.Random . Вам нужно создать экземпляр, а затем вызвать random.nextInt(n) .
Существует стандартный метод, который делает это, но вы можете легко создать свой собственный, используя либо Math.random() либо класс java.util.Random . Вот пример использования Math.random() :
Это примерный результат:
Используя функцию верхнего уровня, вы можете добиться точно такого же синтаксиса вызова, как в Ruby (по вашему усмотрению):
Возможные варианты моего ответа выше
a) Если вы хотите 0..10.random() также включить значение 10 , необходимо следующее изменение:
б) Чтобы получить случайный Char s, вы можете определить функцию следующим образом:
Если вы работаете с JDK> = 1.7, используйте ThreadLocalRandom.current() вместо Random() .
Если числа, которые вы хотите выбрать, не являются последовательными, вы можете определить свою собственную функцию расширения в списке:
Возвращает одно из чисел, которые находятся в списке.
Стандартная библиотека Kotlin не предоставляет API генератора случайных чисел. Если вы не в мультиплатформенном проекте, лучше использовать платформу api (все остальные ответы на вопрос об этом решении) .
Но если вы находитесь в мультиплатформенном контексте, лучшим решением является реализация случайных действий в чистом kotlin для совместного использования одного и того же генератора случайных чисел между платформами. Это проще для разработчиков и тестирования.
Чтобы ответить на эту проблему в моем личном проекте, я реализую чистый линейный конгруэнтный генератор Котлина. LCG – это алгоритм, используемый java.util.Random . Следуйте этой ссылке, если вы хотите ее использовать: https://gist.github.com/11e5ddb567786af0ed1ae4d7f57441d4
Моя цель реализации nextInt(range: IntRange) для вас;).
Позаботьтесь о моей цели, LCG хорош для большинства случаев использования (симуляция, игры и т. Д.), Но не подходит для криптографического использования из-за предсказуемости этого метода.
Источник
Random
Абстрактный класс,реализованный алгоритмами генератора случайных чисел.
Сопутствующий объект Random.Default является экземпляром Random по умолчанию .
Чтобы получить засеянный экземпляр генератора случайных чисел, используйте функцию Random .
Types
Default
Генератор случайных чисел по умолчанию.
Constructors
Абстрактный класс,реализованный алгоритмами генератора случайных чисел.
Functions
nextBits
Получает следующее случайное количество битов bitCount .
nextBoolean
Получает следующее случайное логическое значение.
nextBytes
Заполняет поддиапазон указанного массива байтов, начиная с fromIndex включительно и заканчивая toIndex исключая случайными байтами.
Заполняет указанный байтовый массив случайными байтами и возвращает его.
Создает байтовый массив указанного размера , заполненный случайными байтами.
nextDouble
Получает следующее случайное значение Double, равномерно распределенное между 0 (включительно) и 1 (исключая).
Double from the random number generator less than the specified until bound. —> Получает следующее случайное неотрицательное значение Double от генератора случайных чисел меньше указанного до привязки.
Double from the random number generator in the specified range. —> Получает следующий случайный тип Double из генератора случайных чисел в указанном диапазоне.
nextFloat
Получает следующее случайное значение с плавающей запятой, равномерно распределенное между 0 (включительно) и 1 (исключая).
nextInt
Int from the random number generator. —> Получает следующий случайный Int от генератора случайных чисел.
Int from the random number generator less than the specified until bound. —> Получает следующее случайное неотрицательное значение Int от генератора случайных чисел меньше указанного до привязки.
Int from the random number generator in the specified range. —> Получает следующий случайный Int от генератора случайных чисел в указанном диапазоне.
nextLong
Long from the random number generator. —> Получает следующее случайное число Long из генератора случайных чисел.
Long from the random number generator less than the specified until bound. —> Получает следующее случайное неотрицательное значение Long из генератора случайных чисел меньше указанного до привязки.
Long from the random number generator in the specified range. —> Получает следующее случайное число Long из генератора случайных чисел в указанном диапазоне.
Функции объекта-сопутника
nextBits
Получает следующее случайное количество битов bitCount .
nextBoolean
Получает следующее случайное логическое значение.
nextBytes
Заполняет указанный байтовый массив случайными байтами и возвращает его.
Создает байтовый массив указанного размера , заполненный случайными байтами.
Заполняет поддиапазон указанного массива байтов, начиная с fromIndex включительно и заканчивая toIndex исключая случайными байтами.
nextDouble
Получает следующее случайное значение Double, равномерно распределенное между 0 (включительно) и 1 (исключая).
Double from the random number generator less than the specified until bound. —> Получает следующее случайное неотрицательное значение Double от генератора случайных чисел меньше указанного до привязки.
Double from the random number generator in the specified range. —> Получает следующий случайный тип Double из генератора случайных чисел в указанном диапазоне.
nextFloat
Получает следующее случайное значение с плавающей запятой, равномерно распределенное между 0 (включительно) и 1 (исключая).
nextInt
Int from the random number generator. —> Получает следующий случайный Int от генератора случайных чисел.
Int from the random number generator less than the specified until bound. —> Получает следующее случайное неотрицательное значение Int от генератора случайных чисел меньше указанного до привязки.
Int from the random number generator in the specified range. —> Получает следующий случайный Int от генератора случайных чисел в указанном диапазоне.
nextLong
Long from the random number generator. —> Получает следующее случайное число Long из генератора случайных чисел.
Long from the random number generator less than the specified until bound. —> Получает следующее случайное неотрицательное значение Long из генератора случайных чисел меньше указанного до привязки.
Long from the random number generator in the specified range. —> Получает следующее случайное число Long из генератора случайных чисел в указанном диапазоне.
Функции расширения
asJavaRandom
Создает экземпляр java.util.Random, который использует указанный генератор случайных чисел Kotlin в качестве источника случайности.
nextInt
Int from the random number generator in the specified range. —> Получает следующий случайный Int от генератора случайных чисел в указанном диапазоне .
nextLong
Long from the random number generator in the specified range. —> Получает следующее случайное значение Long из генератора случайных чисел в указанном диапазоне .
nextUBytes
Заполняет указанный массив байтов без знака случайными байтами и возвращает его.
Создает беззнаковый байтовый массив указанного размера , заполненный случайными байтами.
UByte array starting from fromIndex inclusive and ending toIndex exclusive with random UBytes. —> Заполняет поддиапазон указанного массива UByte , начиная с fromIndex включительно и заканчивая toIndex без исключения случайными UBytes.
nextUInt
Получает следующий случайный UInt от генератора случайных чисел.
Получает следующий случайный UInt от генератора случайных чисел меньше указанного до привязки.
Получает следующий случайный UInt из генератора случайных чисел в указанном диапазоне.
Получает следующий случайный UInt из генератора случайных чисел в указанном диапазоне .
nextULong
Получает следующий случайный ULong от генератора случайных чисел.
Получает следующий случайный ULong от генератора случайных чисел меньше указанного до привязки.
Получает следующий случайный ULong из генератора случайных чисел в указанном диапазоне.
Получает следующий случайный ULong от генератора случайных чисел в указанном диапазоне .
Источник
Как я могу получить случайное число в Котлине?
общий метод, который может возвращать случайное целое число между 2 параметрами, как ruby делает с rand(0..n) .
15 ответов
Котлин
я предлагаю использовать следующие расширение функция on IntRange:
и используйте его так:
если вы хотите, чтобы функция возвращала только 1, 2, . 9 (10 exclusive), используйте диапазон, построенный с until :
если вы работаете с JDK > 1.6, используйте ThreadLocalRandom.current() вместо Random() .
KotlinJs и другие варианты
для kotlinjs и других случаев использования, которые не позволяют использовать java.util.Random см. эта альтернатива.
Также см. Этот ответ для вариаций моего предложения. Он также включает в себя функцию расширения для random Char s.
Котлин >= 1.3 мультиплатформенная поддержка случайных
начиная с 1.3, Kotlin поставляется с собственным мультиплатформенным случайным генератором. Это описано в этом KEEP. Теперь вы можете сделать следующее (источник):
функция расширения может быть упрощена до следующего на всех платформах:
сгенерировать случайное целое число между from (включительно) и to (эксклюзив)
начиная с Котлина 1.2, вы можете написать:
просто имейте в виду, что это большой O( n), но для небольшого списка (особенно уникальных значений) все в порядке 😀
вы можете создать функции расширения аналогично java.util.Random.nextInt(int) а нужно IntRange вместо Int для своей границы:
теперь вы можете использовать это с любым Random например:
если вы не хотите, чтобы управлять своими Random экземпляр, то вы можете определить метод удобства, используя, например, ThreadLocalRandom.current() :
теперь вы можете получить случайное целое число, как в Ruby, без необходимости сначала объявлять Random экземпляр себе:
возможный вариант моего другого ответа для случайных символов
для того, чтобы получить случайные Char s, Вы можете определить функцию расширения, как это
если вы работаете с JDK > 1.6, используйте ThreadLocalRandom.current() вместо Random() .
для kotlinjs и других случаев использования, которые не позволяют использовать java.util.Random , ответ поможет.
строительство @s1m0nw1 отличный ответ, я сделал следующие изменения.
- (0..n) подразумевает включительно в Котлин
- (0 до n) подразумевает эксклюзив в Котлине
- используйте одноэлементный объект для случайного экземпляра (необязательно)
примеры случайных в диапазоне [1, 10]
или использование Java Random
Если вы работаете с Котлин JavaScript и не имеют доступа к java.util.Random , следующие работы:
другим способом реализации ответа s1m0nw1 будет доступ к нему через переменную. Не то чтобы это было более эффективно, но это избавляет вас от необходимости вводить ().
и теперь он может быть доступен как таковой
используя функцию верхнего уровня, вы можете достичь точно такого же синтаксиса вызова, как в Ruby (как вы хотите):
во-первых, вам нужен RNG. В Kotlin в настоящее время вам нужно использовать конкретные платформы (в них нет встроенного Kotlin). Для JVM это java.util.Random . Вам нужно будет создать его экземпляр, а затем вызвать random.nextInt(n) .
не существует стандартного метода, который делает это, но вы можете легко создать свой собственный, используя либо Math.random() или класс java.util.Random . Вот пример использования Math.random() способ:
Это образец вывода:
Если номера, которые вы хотите выбрать, не являются последовательными, вы можете определить свою собственную функцию расширения в списке:
возвращает одно из чисел, которые находятся в списке.
Kotlin standard lib не предоставляет API генератора случайных чисел. Если вы не находитесь в мультиплатформенном проекте, лучше использовать API платформы (все остальные ответы на вопрос говорят об этом решении).
но если вы находитесь в мультиплатформенном контексте, лучшим решением является реализация random самостоятельно в чистом Котлине для совместного использования одного и того же генератора случайных чисел между платформами. это более просто для dev и тестирование.
чтобы ответить на эту проблему в моем личном проекте, я реализую чистый Котлин Линейный Конгруэнтный Генератор. LCG-алгоритм, используемый java.util.Random . Перейдите по этой ссылке, если хотите ее использовать : https://gist.github.com/11e5ddb567786af0ed1ae4d7f57441d4
моя цель реализации nextInt(range: IntRange) для вас ;).
позаботьтесь о моей цели, LCG хорош для большинства случаев использования (моделирование, игры и т. д. ) но не подходит для криптографического использования из-за предсказуемости этого метода.
Источник