Kotlin - Random дает одинаковые результаты каждый раз, когда я перезапускаю приложение

У меня есть простое приложение, которое должно генерировать случайную строку из массива. Теперь происходит то, что когда я запускаю приложение, каждый раз я получаю одни и те же результаты. Это происходит на симуляторе и реальном устройстве.

Теперь я нашел разные вещи в Интернете. Одни говорят, что это ошибка, другие говорят, что это по умолчанию. Другие говорят, что вы должны установить случайное семя, но как мне это сделать?

Как я могу это исправить, чтобы каждый раз получать разные строки.

Это мой код:

class SmarttechtransKaartActivity : AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_smarttechtrans_kaart)


val Carts = arrayOf("" +
                "1. goobzrort",

            "2. yweagS",

            "3. ikhrescelte toau",

            "4. erecksliteh daeltoue",

            "5. jzdrfnlieed vrutioeg",

            "6. itdnrre-3p",

            "7. rp-i4rtedn",

            "8. edron",

            "9. uenkifser",

            "10. ligeovdl srehelikct cihps",

            "11. smigakuetnt eiitelltnegni",

            "12. dlnwoemin",

            "13. bnaardknsepiige",

            "14. dR-coQe",

            "15. aadt",

            "16. nlicohkabc",

            "17. enokeciosninem",

            "18. iuhitlm nio eraibjtt",

            "19. tnaueoozn",

            "20. mstartawch",

            "21. bRlrV-i",

            "22. tirtenne",

            "23. ecaram",

            "24. ldelpma",

            "25. rbotorstufieogz",

            "26. miasceuothta sreagrimaa",

            "27. emslmi tatmtrohsae",

            "28. tpasdoc",

            "29. rerirfya",

            "30. eradoazld drealpo",

            "31. creietttiilek",

            "32. GSP",

            "33. ntoiibc",

            "34. rnttInee of Tighsn",

            "35. egevrselnearvv",

            "36. citsrhbieeom tnenoatlgcegosro",

            "37. ezdmurua reeieng",

            "38. tiajtreibbo",

            "39. ayesnietetvimags",

            "40. udtsomeinre",

            "41. koeoebrntuk",

            "42. geatmednu aeytlri",

            "43. thootelbu",

            "44. gnfaree",

            "45. cvreleati nudbwola",

            "46. semlmi olksatek",

            "47. nosrse",

            "48. terabee sesonr lpi",

            "49. oormlhag",

            "50. ibg adat",
            )

button.setOnClickListener() {
val random = Carts.random()
tvvoorkant.setText(random)
}

}
}

ОБНОВИТЬ! ИСПРАВИТЬ:

 button.setOnClickListener {

//OLD: Gets same result on relaunch app...
val random = Carts.random()

textview.text = randomValue

//NEW: Gets different result on relaunch app...
val randomString = Random(System.currentTimeMillis())
val randomValue = Carts[randomString.nextInt(Carts.size)]

textview.text = randomValue

Какую версию Kotlin, Android вы используете? В некоторых версиях Kotlin+Android есть известная ошибка youtrack.jetbrains.com/issue/KT-52618 issuetracker.google.com/issues/234631055

aSemy 21.11.2022 10:50

Отвечает ли это на ваш вопрос? Kotlin random() всегда генерирует одни и те же «случайные» числа

aSemy 21.11.2022 10:52

Спасибо за ваши ответы и за то, что нашли время посмотреть на мою проблему! Я исправил проблему, используя System.currentTimeMillis().

Curiousnoes 21.11.2022 14:51
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
1
3
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Одна важная вещь, которую вам нужно знать о случайных значениях в целом, это то, что они не случайны, они псевдослучайны.

Компьютер не может генерировать случайные значения. Что он делает, так это генерирует огромную последовательность чисел, которая кажется случайной, но в конечном итоге будет повторяться. Вот где семя имеет значение

Обычно вы видите, как люди создают экземпляры Random и используют значения, которые он дает, как если бы они были случайными, но поскольку используемое семя всегда одно и то же, последовательность псевдослучайных значений всегда будет одинаковой.

Для «действительно» случайных значений вам нужно каждый раз указывать разные начальные значения. Вы можете смело использовать System.currentTimeMillis() для этого

**Обратите внимание, что сейчас у меня нет IDE, поэтому синтаксис может быть неточным. Вы можете положиться на функции автозаполнения для правильного синтаксиса

ОБНОВИТЬ

Хорошо, я проверил документы. Взгляните на Random docs для создания нового Random экземпляра с пользовательским начальным числом, случайную функцию расширения для ее использования в ваших массивах и getTimeMillis для получения уникального начального числа для ваших случайных экземпляров.

Большое спасибо за отличный ответ. Вы устранили проблему. Я обновил свой вопрос с исправлением на основе вашего ответа.

Curiousnoes 21.11.2022 14:45

Другие вопросы по теме