Как считать несколько чисел из одной строки
Два числа в одной строке, например 3 5:
fun main() {
val (a, b) = readln().split(" ").map { it.toInt() }
println(a + b)
}3 58split(" ") делит строку по пробелу на части, map { it.toInt() } переводит каждую часть в число, а val (a, b) раскладывает первые два числа по переменным. Так же читаются три числа — val (a, b, c) — и до пяти: дальше раскладка не работает, берите список.
Список чисел
Частый формат задач: в первой строке — количество, во второй — сами числа:
fun main() {
val n = readln().toInt()
val numbers = readln().split(" ").map { it.toInt() }
println("Count: $n")
println("Sum: ${numbers.sum()}")
println("Max: ${numbers.max()}")
}5
3 9 -2 7 4Count: 5
Sum: 21
Max: 9numbers — список List<Int>, с ним работают все функции списков: sum(), max(), sorted(), filter.
Лишние пробелы
Если между числами два пробела или пробел в конце строки, split(" ") даст пустую строку, и toInt() на ней упадёт с ошибкой NumberFormatException: For input string: "". Надёжнее отбросить пустые части:
fun main() {
val numbers = readln().split(" ").filter { it.isNotEmpty() }.map { it.toInt() }
println(numbers)
} 10 20 30[10, 20, 30]То же можно записать через регулярное выражение «один или несколько пробельных символов»: readln().trim().split(Regex("\\s+")).map { it.toInt() }.
Числа на отдельных строках
Если каждое число — на своей строке, а их количество дано первым:
fun main() {
val n = readln().toInt()
val numbers = List(n) { readln().toInt() }
println(numbers)
}3
10
20
30[10, 20, 30]List(n) { ... } создаёт список из n элементов, вычисляя каждый блоком в фигурных скобках — здесь читая очередную строку.
До конца ввода
Если количество заранее неизвестно, читайте, пока строки не кончатся. readlnOrNull() возвращает null, когда ввод закончился:
fun main() {
var sum = 0
while (true) {
val line = readlnOrNull() ?: break
sum += line.toInt()
}
println(sum)
}1
2
36Обычный readln() в конце ввода не возвращает null, а бросает ошибку — поэтому здесь нужен readlnOrNull(). При вводе с клавиатуры конец ввода — Ctrl+D в Linux и macOS, Ctrl+Z и Enter в Windows.
Дробные числа
То же самое с toDouble(): readln().split(" ").map { it.toDouble() }. Дробная часть — через точку: 2.5. Строка 2,5 вызовет ошибку — о переводе строк в числа подробно в справке Как перевести строку в число.