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

November 22, 20223 хв читанняАрхів

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

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

Random#

Говорячи про випадковість в Kotlin, будь-який Kotlin-розробник відразу згадає kotlin.random пакет, який вбудований в Kotlin.

За допомогою нього ви можете:

  • генерувати випадкові числа: цілі (Int, Long) та з плаваючою точкою (Float, Double)
  • генерувати випадковий логічний тип Boolean

💡 Не завадить знати
Також, kotlin.random може генерувати байти та біти, але ми ці типи ще не розглядали.

Перейдім до більш практичної частини. Як це все робиться?

Щоб отримати випадкове ціле число, ми можемо використати функцію Random.nextInt(from, until):

import kotlin.random.Random
 
fun main() {
    println(Random.nextInt(0, 9))
}

Виведе:

8

Тобто, випадковість обмежена від 0 до 9.

⚠️ Увага
Можуть бути будь-які цифри, головне – не переплутати 'від' з 'до' і не зробити наступне Random.nextInt(9, 0). Буде помилка!

За аналогією працюють і інші функції:

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()) 
}

Виведе приблизно таке:

2
386039
7.176104912683028
false

Вирішім наступне завдання:

ℹ️ Завдання №1
Користувач вводить число від 1 до 30 (перевірте число). Зробіть програму, що буде вгадувати число користувача та друкувати скільки спроб знадобилось, щоб вгадати вказане число.

Спочатку отримаємо число та перевіримо його:

fun main() {
    val number = readln().toInt()
    if(number < 0 || number > 30) {
        println("Число має бути в діапазоні між 1 та 30.")
        return // виходимо з функції
    }
}

Тепер для того, щоб вгадати число ми можемо скористатись циклічним оператором while

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--.

До речі, така операція має два види:

  • префіксний інкеремент / декремент
  • постфіксний інкремент / декремент

В нашому випадку, це постфіксний інкремент. Але чим вони відрізняються?

Префіксний інкремент спочатку додає, а потім повертає значення з виразу, а постфіксний інкремент спочатку віддає значення, а потім додає один. Тобто:

var x = 0
println(x++) // виведе 0
println(x) // тільки тут він виведе 1
 
var y = 0
println(++y) // виведе 1

Пов'язані нотатки

Коментарі