- Как я могу получить случайное число в Котлине?
- 17 ответов
- Как я могу получить случайное число в Котлине?
- Как я могу получить случайное число в Котлине?
- 15 ответов
- Котлин
- KotlinJs и другие варианты
- Котлин >= 1.3 мультиплатформенная поддержка случайных
- Как я могу получить случайное число в Котлин?
- 15 ответов:
- Котлин
Как я могу получить случайное число в Котлине?
Универсальный метод, который может возвращать случайное целое число между 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 хорош для большинства случаев использования (симуляция, игры и т. Д.), Но не подходит для криптографического использования из-за предсказуемости этого метода.
Источник
Как я могу получить случайное число в Котлине?
общий метод, который может возвращать случайное целое число между 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 хорош для большинства случаев использования (моделирование, игры и т. д. ) но не подходит для криптографического использования из-за предсказуемости этого метода.
Источник
Как я могу получить случайное число в Котлин?
универсальный метод, который может возвращать случайное целое число между 2 параметрами, как ruby делает с rand(0..n) .
15 ответов:
Котлин
я предлагаю использовать следующие расширение
сгенерировать случайное целое число между from (включительно) и to (эксклюзив)
начиная с kotlin 1.2, вы можете написать:
просто имейте в виду, что это большой O(n), но для небольшого списка (особенно уникальных значений) все в порядке 😀
теперь вы можете использовать это с любым 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 (как вы хотите):
во-первых, вам нужен ГСЧ. В 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 хорош для большинства случаев использования (моделирование, игры и т. д. ) но не подходит для криптографического использования из-за предсказуемости этого метода.
Источник