Wczytywanie danych z konsoli

Do tej pory program tylko wypisywał gotowe dane. Teraz nauczysz się je wczytywać od użytkownika: poznasz readln(), dowiesz się, jak zamienić wpisany tekst na liczbę (toInt() i bezpieczne toIntOrNull()) i zbudujesz program według wzorca „pobierz – przelicz – wypisz”.

readln() toInt() toIntOrNull() pobierz–przelicz–wypisz
1

readln() – wczytanie linii tekstu

Funkcja readln() czeka, aż użytkownik wpisze coś z klawiatury i naciśnie Enter, a następnie zwraca wpisaną linię jako tekst (String).

Wczytanie i powitanie
fun main() {
    print("Jak masz na imię? ")   // print – kursor zostaje w tej samej linii
    val imie = readln()             // czekamy na wpis i Enter
    println("Cześć, $imie!")
}
print zamiast println przy pytaniu

Przed wczytaniem warto wypisać pytanie funkcją print (bez przejścia do nowej linii) – wtedy użytkownik wpisuje odpowiedź zaraz obok pytania. To czysto kosmetyczne, ale wygląda dużo lepiej.

2

Gdzie uruchamiać programy z wczytywaniem

Do wczytywania danych użyj IntelliJ IDEA

Kotlin Playground świetnie sprawdza się do kodu, który tylko coś wypisuje. Nie udostępnia jednak pola, w które użytkownik mógłby wpisać dane w trakcie działania programu. Dlatego programy z readln() uruchamiaj w IntelliJ IDEA – tam okno konsoli na dole przyjmuje tekst wpisywany z klawiatury.

W IntelliJ uruchom program zieloną strzałką obok main, a następnie kliknij w okno konsoli i wpisuj dane, zatwierdzając każde Enterem.

3

Wczytane dane to zawsze String

To kluczowa sprawa: readln() zawsze zwraca tekst – nawet gdy użytkownik wpisze cyfry. Tekst "5" to nie liczba 5. Jeśli spróbujesz na nim liczyć, dostaniesz nieoczekiwany wynik.

Pułapka: dodawanie tekstów
val a = readln()   // użytkownik wpisuje 5  -> "5" (tekst)
val b = readln()   // użytkownik wpisuje 3  -> "3" (tekst)

println(a + b)   // "53"  – sklejone teksty, a nie 8!

Żeby móc liczyć, trzeba wczytany tekst najpierw zamienić na liczbę – i tym zajmiemy się w następnej sekcji.

4

Konwersja wejścia: toInt() i toDouble()

Znasz już metody to...() z lekcji o typach. Tutaj wykorzystamy je do zamiany wczytanego tekstu na liczbę:

Wczytanie liczby
print("Podaj wiek: ")
val wiek = readln().toInt()      // tekst -> Int
println("Za rok będziesz mieć ${wiek + 1} lat")

print("Podaj wzrost (m): ")
val wzrost = readln().toDouble()  // tekst -> Double
println("Twój wzrost to $wzrost m")
toInt() pada, gdy to nie liczba

Jeśli użytkownik wpisze coś, co nie jest liczbą (np. "abc" albo zostawi puste pole), toInt() przerwie program błędem. Tak samo toInt() na tekście z przecinkiem ("3.5") – do liczb z przecinkiem służy toDouble(). Bezpieczniejsze rozwiązanie poznasz w następnej sekcji.

5

Bezpieczne wczytywanie: toIntOrNull()

Metoda toIntOrNull() działa jak toInt(), ale gdy tekst nie jest poprawną liczbą, zamiast przerwać program zwraca specjalną „pustą” wartość null (czyli „brak liczby”). Dzięki temu program nie pada – ty decydujesz, co zrobić w razie błędnych danych.

Wpisany teksttoInt()toIntOrNull()
"42"4242
"abc"❌ błąd, program pada✅ null (brak liczby)
puste pole❌ błąd✅ null
Reakcja na błędne dane
print("Podaj wiek: ")
val wiek = readln().toIntOrNull()   // Int albo null

if (wiek == null) {
    println("To nie była poprawna liczba.")
} else {
    println("Za rok będziesz mieć ${wiek + 1} lat.")
}
Tu tylko sygnalizujemy

Powyższy przykład używa instrukcji if oraz wartości null. Oba tematy rozłożymy dokładnie później: if w bloku o sterowaniu przepływem, a null w osobnym bloku o bezpieczeństwie null. Na razie zapamiętaj samą zasadę: toIntOrNull() nie wywala programu.

6

Wzorzec: pobierz – przelicz – wypisz

Większość prostych programów konsolowych ma ten sam szkielet w trzech krokach:

KrokCo robimy
1. PobierzWypisz pytanie i wczytaj dane (readln() + konwersja).
2. PrzeliczWykonaj obliczenia na wczytanych wartościach.
3. WypiszPokaż wynik użytkownikowi (println + szablon).
Pole prostokąta
fun main() {
    // 1. POBIERZ
    print("Podaj szerokość: ")
    val szerokosc = readln().toInt()

    print("Podaj wysokość: ")
    val wysokosc = readln().toInt()

    // 2. PRZELICZ
    val pole = szerokosc * wysokosc
    val obwod = 2 * (szerokosc + wysokosc)

    // 3. WYPISZ
    println("Pole:  $pole")
    println("Obwód: $obwod")
}
7

Częste błędy

❌ Błąd 1: liczenie na wczytanym tekście bez konwersji

❌ Sklejanie zamiast dodawania

val a = readln()
val b = readln()
println(a + b)
// wpisując 5 i 3 -> "53"

✅ Najpierw toInt()

val a = readln().toInt()
val b = readln().toInt()
println(a + b)
// wpisując 5 i 3 -> 8

❌ Błąd 2: toInt() na danych, które mogą nie być liczbą

❌ Program pada na „abc”

val n = readln().toInt()
// wpisując "abc" program
// przerywa się błędem

✅ Bezpieczne toIntOrNull()

val n = readln().toIntOrNull()
// "abc" -> null,
// program nie pada

❌ Błąd 3: toInt() dla liczby z przecinkiem

❌ „3.5” nie jest Int

val x = readln().toInt()
// wpisując 3.5 -> błąd!

✅ Liczby ułamkowe: toDouble()

val x = readln().toDouble()
// wpisując 3.5 -> 3.5

❌ Błąd 4: średnia wczytanych liczb bez Double

❌ Dzielenie całkowite

val a = readln().toInt()
val b = readln().toInt()
println((a + b) / 2)
// 5 i 8 -> 6 (nie 6.5!)

✅ Konwersja na Double

val a = readln().toInt()
val b = readln().toInt()
println((a + b) / 2.0)
// 5 i 8 -> 6.5
8

Podsumowanie

  • readln() wczytuje linię od użytkownika i zwraca ją jako tekst (String).
  • Programy z wczytywaniem uruchamiaj w IntelliJ IDEA – Playground nie ma pola na dane.
  • Aby liczyć, wczytany tekst trzeba skonwertować: readln().toInt() lub readln().toDouble().
  • toInt() przerywa program, gdy tekst nie jest liczbą; toIntOrNull() zwraca wtedy null i program działa dalej.
  • Typowy szkielet programu: pobierz → przelicz → wypisz.
  • Pamiętaj o dzieleniu: aby uzyskać wynik z przecinkiem, użyj Double (np. / 2.0).
9

Zadania do wykonania

Zadania uruchamiaj w IntelliJ IDEA (wymagają wczytywania danych).

Zadanie 1 łatwe

Poproś użytkownika o imię (readln()) i przywitaj go pełnym zdaniem, używając szablonu, np. „Miło Cię poznać, Anna!”.

Zadanie 2 łatwe

Wczytaj dwie liczby całkowite (pamiętaj o toInt()) i wypisz ich sumę, różnicę i iloczyn.

Zadanie 3 łatwe

Według wzorca pobierz – przelicz – wypisz napisz program, który wczyta rok urodzenia i wyliczy przybliżony wiek (odejmując rok od bieżącego roku, który możesz wpisać na sztywno).

Zadanie 4 średnie

Napisz przelicznik ceny netto na brutto: wczytaj cenę netto jako Double (toDouble()), dolicz 23% VAT i wypisz cenę brutto. Dla ambitnych: spróbuj wczytać cenę przez toDoubleOrNull() i obsłużyć sytuację, gdy użytkownik wpisze coś, co nie jest liczbą.