Random kotlin android studio

Как я могу получить случайное число в Котлине?

Универсальный метод, который может возвращать случайное целое число между 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 отличный ответ, я внес следующие изменения.

  1. (0..n) подразумевает включительно в Kotlin
  2. (От 0 до n) подразумевает исключение в Kotlin
  3. Используйте одноэлементный объект для экземпляра 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, я внес следующие изменения.

  1. (0..n) подразумевает включение в Котлин
  2. (От 0 до n) подразумевается эксклюзивный в Котлине
  3. Используйте одноэлементный объект для экземпляра 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 отличный ответ, я сделал следующие изменения.

  1. (0..n) подразумевает включительно в Котлин
  2. (0 до n) подразумевает эксклюзив в Котлине
  3. используйте одноэлементный объект для случайного экземпляра (необязательно)

примеры случайных в диапазоне [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 отличный ответ, я сделал следующие изменения.

  1. (0..n) подразумевает включительно в Котлин
  2. (0 до n) подразумевает эксклюзив в Котлине
  3. используйте одноэлементный объект для случайного экземпляра (необязательно)

примеры случайных в диапазоне [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 хорош для большинства случаев использования (моделирование, игры и т. д. ) но не подходит для криптографического использования из-за предсказуемости этого метода.

Источник

Читайте также:  Com android phone permission
Оцените статью