Kotlin для початківців: Основи — Випадкові числа

Архів
22 листопада 2022 р.3 хв читання
Kotlin для початківців

Випадковість в Kotlin

Я думаю ви багато разів зустрічались з поняттям «випадковості». Була це лотерея, чи енеки-бенеки – неважливо. Наше життя постійно спіткає та чи інша випадковість. Розгляньмо, як випадковість працює в Kotlin.

Random

Говорячи про випадковість в Kotlin, будь-який Kotlin-розробник відразу згадає kotlin.random пакет, який вбудований в Kotlin.
За допомогою нього ви можете:
  • генерувати випадкові числа: цілі (Int, Long) та з плаваючою точкою (Float, Double)
  • генерувати випадковий логічний тип Boolean
💡 Не завадить знати
Також, kotlin.random може генерувати байти та біти, але ми ці типи ще не розглядали.
Перейдім до більш практичної частини. Як це все робиться?
Щоб отримати випадкове ціле число, ми можемо використати функцію Random.nextInt(from, until):
kotlin
import kotlin.random.Random fun main() { println(Random.nextInt(0, 9)) }
Виведе:
text
8
Тобто, випадковість обмежена від 0 до 9.
⚠️ Увага
Можуть бути будь-які цифри, головне – не переплутати 'від' з 'до' і не зробити наступне Random.nextInt(9, 0). Буде помилка!
За аналогією працюють і інші функції:
kotlin
import kotlin.random.Random fun main() { println(Random.nextInt(0, 9)) println(Random.nextLong(1L, 1000000L)) println(Random.nextDouble(1.9, 9.9)) println(Random.nextBoolean()) }
Виведе приблизно таке:
text
2 386039 7.176104912683028 false
Вирішім наступне завдання:
ℹ️ Завдання №1
Користувач вводить число від 1 до 30 (перевірте число). Зробіть програму, що буде вгадувати число користувача та друкувати скільки спроб знадобилось, щоб вгадати вказане число.
Спочатку отримаємо число та перевіримо його:
kotlin
fun main() { val number = readln().toInt() if(number < 0 || number > 30) { println("Число має бути в діапазоні між 1 та 30.") return // виходимо з функції } }
Тепер для того, щоб вгадати число ми можемо скористатись циклічним оператором while
kotlin
import kotlin.random.Random // додаємо до нашого простору імен тип Random fun main() { val number = readln().toInt() if (number < 0 || number > 30) { println("Число має бути в діапазоні між 1 та 30.") return // виходимо з функції } var attempt = 0 // робимо змінну, щоб зберігати кількість спроб while (true) { if (Random.nextInt(0, 30) == number) { println("Число було знайдено за $attempt") // робимо конкатенацію break // виходимо з циклу } attempt++ // додаємо 1 до attempt } }
💡 Цікаво знати
Якесь незрозуміле attempt++, чи не так? Насправді це просто спрощення для attempt = attempt + 1. Воно також існує і в інший бік: attempt--.
До речі, така операція має два види:
  • префіксний інкеремент / декремент
  • постфіксний інкремент / декремент
В нашому випадку, це постфіксний інкремент. Але чим вони відрізняються?
Префіксний інкремент спочатку додає, а потім повертає значення з виразу, а постфіксний інкремент спочатку віддає значення, а потім додає один. Тобто:
kotlin
var x = 0 println(x++) // виведе 0 println(x) // тільки тут він виведе 1 var y = 0 println(++y) // виведе 1