Skip to Content
Kotlin📘 Ngôn ngữ KotlinNhập dữ liệu từ Bàn phím (readln)

Nhập dữ liệu từ Bàn phím trong Kotlin

1. Giới thiệu

Trong Kotlin, để nhập dữ liệu từ bàn phím (console), chúng ta sử dụng hàm readln() hoặc readLine().

So sánh với Python:

  • Python: input()
  • Kotlin: readln() hoặc readLine()

2. Hàm readln() - Đọc một dòng

2.1. Cú pháp cơ bản

fun main() { println("Nhập tên của bạn:") val name = readln() println("Xin chào, $name!") }

Giải thích:

  • readln() đọc một dòng văn bản từ console
  • Kết quả trả về là kiểu String
  • Chương trình sẽ dừng lại chờ người dùng nhập và nhấn Enter

2.2. Nhập và hiển thị thông tin

fun main() { print("Nhập tên: ") val name = readln() print("Nhập tuổi: ") val age = readln() println("\n--- Thông tin ---") println("Tên: $name") println("Tuổi: $age") }

3. Chuyển đổi kiểu dữ liệu

3.1. Chuyển sang số nguyên (Int)

readln() luôn trả về String, nên cần chuyển đổi kiểu:

fun main() { print("Nhập tuổi của bạn: ") val ageString = readln() val age = ageString.toInt() // Chuyển String sang Int println("Năm sau bạn ${age + 1} tuổi") }

Cách viết ngắn gọn:

fun main() { print("Nhập tuổi: ") val age = readln().toInt() // Chuyển đổi trực tiếp println("Năm sau bạn ${age + 1} tuổi") }

3.2. Các hàm chuyển đổi kiểu

HàmChuyển sangVí dụ
toInt()Int"123".toInt()123
toLong()Long"999999".toLong()
toDouble()Double"3.14".toDouble()3.14
toFloat()Float"2.5".toFloat()2.5f
toBoolean()Boolean"true".toBoolean()true
print("Nhập chiều cao (m): ") val height = readln().toDouble() print("Nhập cân nặng (kg): ") val weight = readln().toDouble() val bmi = weight / (height * height) println("Chỉ số BMI: %.2f".format(bmi))

4. Xử lý lỗi khi nhập dữ liệu

4.1. Xử lý NumberFormatException

Khi người dùng nhập sai định dạng, sẽ gây ra lỗi:

// Code này sẽ lỗi nếu nhập chữ thay vì số val age = readln().toInt() // NumberFormatException!

Giải pháp: Sử dụng try-catch

fun main() { print("Nhập tuổi: ") try { val age = readln().toInt() println("Tuổi của bạn: $age") } catch (e: NumberFormatException) { println("Lỗi: Vui lòng nhập số hợp lệ!") } }

4.2. Sử dụng toIntOrNull()

Thay vì throw exception, trả về null nếu không hợp lệ:

fun main() { print("Nhập tuổi: ") val age = readln().toIntOrNull() if (age != null) { println("Tuổi: $age") } else { println("Dữ liệu không hợp lệ!") } }

Sử dụng Elvis operator:

print("Nhập tuổi: ") val age = readln().toIntOrNull() ?: 0 // Mặc định là 0 nếu lỗi println("Tuổi: $age")

5. Hàm readLine() - Nullable

readLine() trả về String? (nullable), cần xử lý null:

fun main() { println("Nhập tên:") val name: String? = readLine() if (name != null) { println("Xin chào, $name") } else { println("Không nhận được dữ liệu") } }

Sử dụng safe call và Elvis:

val name = readLine() ?: "Guest" println("Xin chào, $name")

Khuyến nghị:

  • Sử dụng readln() (Kotlin 1.6+) - đơn giản hơn, không nullable
  • Sử dụng readLine() nếu cần xử lý null

6. Nhập nhiều giá trị trên một dòng

6.1. Sử dụng split()

fun main() { println("Nhập hai số (cách nhau bởi dấu cách):") val input = readln().split(" ") val a = input[0].toInt() val b = input[1].toInt() println("Tổng: ${a + b}") }

6.2. Destructuring declaration

println("Nhập tên và tuổi (cách nhau bởi dấu cách):") val (name, ageStr) = readln().split(" ") val age = ageStr.toInt() println("Tên: $name, Tuổi: $age")

6.3. Map và chuyển đổi

println("Nhập 3 số (cách nhau bởi dấu cách):") val numbers = readln().split(" ").map { it.toInt() } println("Tổng: ${numbers.sum()}")

7. Vòng lặp nhập liệu

7.1. Nhập cho đến khi hợp lệ

fun main() { var age: Int? = null while (age == null) { print("Nhập tuổi: ") age = readln().toIntOrNull() if (age == null) { println("Vui lòng nhập số hợp lệ!") } } println("Tuổi của bạn: $age") }

7.2. Nhập danh sách

fun main() { println("Nhập số lượng sinh viên:") val n = readln().toInt() val students = mutableListOf<String>() repeat(n) { i -> print("Nhập tên sinh viên ${i + 1}: ") students.add(readln()) } println("\nDanh sách sinh viên:") students.forEachIndexed { index, name -> println("${index + 1}. $name") } }

8. Ví dụ thực tế

Ví dụ 1: Tính tổng hai số

fun main() { print("Nhập số thứ nhất: ") val a = readln().toInt() print("Nhập số thứ hai: ") val b = readln().toInt() val sum = a + b println("$a + $b = $sum") }

Ví dụ 2: Tính chỉ số BMI

fun main() { print("Nhập chiều cao (cm): ") val heightCm = readln().toDouble() val heightM = heightCm / 100 print("Nhập cân nặng (kg): ") val weight = readln().toDouble() val bmi = weight / (heightM * heightM) println("Chỉ số BMI của bạn: %.2f".format(bmi)) when { bmi < 18.5 -> println("Bạn gầy") bmi < 25.0 -> println("Bạn bình thường") bmi < 30.0 -> println("Bạn thừa cân") else -> println("Bạn béo phì") } }

Ví dụ 3: Kiểm tra số chẵn lẻ

fun main() { print("Nhập một số nguyên: ") val number = readln().toIntOrNull() if (number == null) { println("Dữ liệu không hợp lệ!") return } if (number % 2 == 0) { println("$number là số chẵn") } else { println("$number là số lẻ") } }

9. So sánh với Python

Tính năngKotlinPython
Nhập chuỗireadln()input()
Nhập sốreadln().toInt()int(input())
Nhập số thựcreadln().toDouble()float(input())
Xử lý lỗitoIntOrNull()try-except
Tách chuỗisplit(" ")split()

10. Best Practices

  1. Sử dụng readln() thay vì readLine() (Kotlin 1.6+)
  2. Xử lý lỗi với toIntOrNull() hoặc try-catch
  3. Hiển thị prompt rõ ràng để người dùng biết nhập gì
  4. Validate dữ liệu trước khi xử lý
  5. Sử dụng trim() để loại bỏ khoảng trắng thừa
// Good practice print("Nhập tuổi của bạn: ") val age = readln().trim().toIntOrNull() if (age != null && age > 0 && age < 150) { println("Tuổi hợp lệ: $age") } else { println("Tuổi không hợp lệ!") }

📝 Tóm tắt

  • readln(): Đọc một dòng từ console (Kotlin 1.6+)
  • readLine(): Đọc một dòng, trả về nullable String?
  • Chuyển đổi kiểu: toInt(), toDouble(), toFloat(), toBoolean()
  • Xử lý lỗi: Sử dụng toIntOrNull() hoặc try-catch
  • Tách chuỗi: Sử dụng split() để nhập nhiều giá trị
  • Validation: Luôn kiểm tra dữ liệu đầu vào
  • Elvis operator: readln().toIntOrNull() ?: 0 cho giá trị mặc định
Last updated on