Kotlin – kalkulator część druga.

Rozwinięcie kalkulatora w konsoli

W tym poście skorzystam z pętli, instrukcji warunkowych, instrukcji wyboru(specjalnych dla języka Kotlin). Oraz napiszę bardziej rozbudowaną funkcję. Do dzieła!
zaczynamy od stworzenia nowego pliku. Nazwa nie ma znaczenia. Interesuje mnie tylko rozszerzenie .kt charakterystyczne dla języka Kotlin.

Tak jak poprzednio trzeba pobrać liczby od użytkownika. Tak więc w funkcji main. Wyświetlamy informacje dla użytkownika i pobieramy od niego dane:

    print("Enter first number: ")
    val number = readLine()!!.toInt()
    print("Enter second number: ")
    val secondNumber = readLine()!!.toInt()

Następnie powinniśmy wyświetlić użytkownikowi menu, żeby dać mu wybór działania.

    println(" 1 - addition")
    println(" 2 - subtraction ")
    println(" 3 - multiplication")
    println(" 4 - division")

Teraz najciekawsza część, musimy pobrać od użytkownika to co wybrał oraz dostarczyć wynik działania. Dla prostoty wybieramy liczbą więc pewnie domyślasz się jak to zrobić. Pobieramy porostu kolejną liczbę.

    val choice = readLine()!!.toInt()

Powiedz teraz głośno co chcesz wykonać. Może to brzmieć mniej więcej tak:
Kiedy użytkownik wybierze jeden – wyświetlam wynik dodawania, kiedy wybierze dwa… itd.
Napiszę teraz równoważny temu kod:

    when (choice) {
        1 -> println(add(number, secondNumber))
        2 -> println(subtraction(number, secondNumber))
        3 -> println(multiplication(number, secondNumber))
        4 -> println(division(number, secondNumber))
     }

Kiedy choice wynosi jeden to drukowany jest wynik funkcji add.
Jak choice wynosi dwa to drukowany jest wynik funkcji subtraction. itd.

Pozostaje jeszcze zakodować funkcję które, nie były użyte w poprzednim poście. Odejmowanie i mnożenie spróbuj zrobić samemu. Możesz też pokusić się o dzielenie. Ale chce jeszcze to pokazać.

fun subtraction(first: Int, second: Int): Int = first - second
fun multiplication(first: Int, second: Int): Int = first * second

Tu nie wiele się zmienia. Najważniejsze rzeczy dzieją się w operacji dzielenia. Zakładając, że użytkownik wpisze liczbę 2 i 5 to wynik wyjdzie: 0 A spodziewalibyśmy się 0.4
Tak, zgadza się. Ma to związek ze zwracaną liczbą jako argumenty funkcja przyjmuje liczbę całkowitą z przedziału: -2147483648 do 2147483647. Integer.
Teraz potrzebny jest typ zmiennoprzecinkowy. Float
W funkcji dzielenie należy też sprawdzić czy nie dzielę przez zero.

fun division(first: Int, second: Int): Float {
    return if(second == 0) {
        println("Don't divide by zero!")
        0f
    } else {
        first.toFloat()/second.toFloat()
    }
}

Funkcja przyjmuje dwa argumenty jako liczby całkowitę ale zwraca typ float. Jeśli warunek z Ifa jest prawdziwy to wypisuje na ekranie: “Nie dziel przez zero!” i zwraca wartość 0 podciągniętą do typu float. W innym wypadku zamienia obie liczby na float i zwraca wynik dzielenia.

Dodajemy też możliwość wyjścia z kalkulatora i zapętlmy program. Cały kod wygląda teraz tak:

fun main(args: Array<String>) {
    while (true) {
        print("Enter first number: ")
        val number = readLine()!!.toInt()
        print("Enter second number: ")
        val secondNumber = readLine()!!.toInt()

        println(" 1 - addition")
        println(" 2 - subtraction ")
        println(" 3 - multiplication")
        println(" 4 - division")
        println(" 99 - exit")

        val choice = readLine()!!.toInt()
        when (choice) {
            1 -> println(add(number, secondNumber))
            2 -> println(subtraction(number, secondNumber))
            3 -> println(multiplication(number, secondNumber))
            4 -> println(division(number, secondNumber))
            99 -> {
                println("bye")
                return
            }
            else -> println("Wrong number!")
        }
    }
}

fun add(first: Int, second: Int): Int = first + second
fun subtraction(first: Int, second: Int): Int = first - second
fun multiplication(first: Int, second: Int): Int = first * second

fun division(first: Int, second: Int): Float {
    return if(second == 0) {
        println("Don't divide by zero!")
        0f
    } else {
        first.toFloat()/second.toFloat()
    }
}

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *