Консольный ввод

Разбор и форматирование строк может применяться, в том числе, для взаимодействия с пользователем в консольном приложении. Вам уже известна функция println, предназначенная для вывода информации на консоль. Комбинируя её с функцией String.format или со строковыми шаблонами, программа может обеспечить вывод на консоль в нужном пользователю формате.

Для ввода информации с консоли в Котлине применяется функция readLine(), считывающая одну строку с консоли. Строка заканчивается, когда пользователь нажимает клавишу Enter. Функция не имеет параметров, а результат её имеет тип String?. Знак вопроса после названия типа означает, что, помимо строки, результатом функции может быть также специальная константа null. Смысл этой константы в большинстве случаев — »некорректный результат», фактически это ещё один (в дополнении к исключениям) способ поведения в ошибочных ситуациях. Более точный смысл null — некорректная ссылка, не ссылающаяся никуда.

readLine() использует результат null, когда ввод строки по какой-либо причине завершился неудачно. Это может произойти при достижении особого символа конец файла, который в нормальной ситуации не встречается при вводе в консоли. Операционная система, однако, имеет возможность перенаправления консольного входа программы таким образом, чтобы вместо ввода информации пользователем с клавиатуры программа читала информацию из файла. В случае использования такого перенаправления действительно возможно достижение конца файла.

Пример использования readLine():

fun main(args: Array<String>) {
    println("Введите время в формате ЧЧ:ММ:СС")
    val line = readLine()
    if (line != null) {
        val seconds = timeStrToSeconds(line)
        if (seconds == -1) {
            println("Введённая строка $line не соответствует формату ЧЧ:ММ:СС")
        }
        else {
            println("Прошло секунд с начала суток: $seconds")
        }
    }
    else {
        println("Достигнут <конец файла> в процессе чтения строки. Программа прервана")
    }
}

Здесь используется уже написанная нами функция timeStrToSeconds, которой передаётся на вход прочитанная строка line.

Упражнения

Откройте файл srс/lesson6/task1/Parse.kt в проекте KotlinAsFirst.

Выберите любую из задач в нём. Придумайте её решение и запишите его в теле соответствующей функции. Применяйте функцию split для разбора строк. Для их форматирования применяйте строковые шаблоны или, если их недостаточно — функцию String.format().

Откройте файл test/lesson6/task1/Tests.kt, найдите в нём тестовую функцию — её название должно совпадать с названием написанной вами функции. Запустите тестирование, в случае обнаружения ошибок исправьте их и добейтесь прохождения теста. Подумайте, все ли необходимые проверки включены в состав тестовой функции, добавьте в неё недостающие проверки.

Решите ещё хотя бы одну задачу из урока 6 на ваш выбор. Убедитесь в том, что можете решать такие задачи уверенно и без посторонней помощи. По возможности решите одну из задач, помеченных как «Сложная».

Попробуйте написать функцию main, осуществляющую консольный ввод входных данных для вашей задачи (хорошо подходит в тех случаях, когда параметром функции является строка), с последующим выводом на консоль результатов, попробуйте поиграть с получившейся программой в консоли.

Переходите к следующему разделу.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.