Random (). NextInt () не нумерация с нуля? - PullRequest
0 голосов
/ 26 января 2019
import java.util.*

Я пытаюсь сгенерировать случайную строку из моего массива:

val days = arrayOf("Tuesday", "Thursday", "Saturday")
val chosenDay = days[Random().nextInt(2)]

Однако days[Random().nextInt(2)], похоже, возвращается только во вторник и четверг.Я нигде не мог найти ответ, но почему nextInt() не использует нумерацию с нуля?

Я изменил его на days[Random().nextInt(3)], и теперь он работает нормально.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Как типично для Kotlin, для типичных случаев использования имеется множество функций расширения. Например, получает случайный элемент из массива или коллекции.

В вашем случае самый простой код:

val chosenDay = days.random()

Или, если вам нужно больше контроля над случайностью:

val chosenDay = days.random(Random(12345))   // for testing

Причина, по которой Random.nextInt(n) генерирует случайное число, начинающееся с нуля, заключается в том, что его удобно использовать в выражениях, подобных этому:

val chosenDay = days[Random().nextInt(days.size)]
0 голосов
/ 26 января 2019

Речь идет не об индексации на основе нуля или единицы (если бы это было так, вы бы получили только "Thursday" или "Saturday"), но это nextInt принимает исключительную верхнюю границу.То есть nextInt(3) возвращает число меньше 3.

Это соглашение, фактически совместимое с нулевым индексированием, поскольку оно означает, что вы можете использовать длину массива в качестве верхней границы для получения случайного элементамассива.

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