Перейти к содержанию

🗒 Задача

Создай новый список ингредиентов, состоящий из 3 шт. Нужно расширить функционал программы – пусть у пользователя будет возможность добавить к базовым ингредиентам из списка еще один свой.

  • после создания базового списка, выведи его в консоль: "В рецепте есть базовые ингредиенты: [базовый_список_ингредиентов]";

  • затем сообщи о возможности добавить свой: "Желаете добавить еще?” и активировать ввод с консоли;

  • если пользователь ввел “нет” или что-то иное – заверши программу, если пользователь ввел “да” – запроси: "Какой ингредиент вы хотите добавить?";

  • для обработки ответа пользователя используй метод сравнения строк с игнорированием регистра: equals ;

  • добавь считанное значение в базовый список;

  • в конце выведи сообщение со списком всех элементов такого типа: "Теперь в рецепте есть следующие ингредиенты: [список_ингредиентов]".

❌ Ошибки

  • строку приводят к нижнему регистру и сравнивают — предлагать более элегантное решение answer.equals("да", ignoreCase = true)

  • для выхода используют exitProcess

✏️ Комментарии

Можно запрашивать строку прям в условии. Тут не обязательна дополнительная переменная в силу того, что используем ее только один раз.
Давай еще учтем разный регистр, который может быть введен пользователем. Можно использовать метод сравнения у которого есть свойство `ignoreCase`
`exitProcess` используется для немедленного завершения выполнения всего процесса приложения с указанным кодом выхода. Это агрессивный способ завершения, и он должен использоваться только в случаях, когда необходимо полностью завершить работу программы. 

И если в консольном приложении особо последствий не будет, но если так решить выйти из функции в Андройд приложении это будет чревато. Например, тем, что некоторые данные состояния могут не сохраниться.
Предлагаю использовать более распространенные и безопасный способ выхода из функции.
`if` , как другие конструкции лучше обосабливать пустыми строками. Это должно уменьшить монолитность кода и сделать его более читабельным.
Давай добавим пустых строк, код выглядит слишком монолитным)
А есть ли смысл выделять ресурсы на создание дополнительного списка?)

🧾 Решение

fun main() {
    val ingredients = mutableListOf("соль", "сахар", "мука")
    println("В рецепте есть базовые ингредиенты:")
    ingredients.forEach { println(it) }
    println()

    println("Желаете добавить еще?")
    val answer = readln()

    if (answer.equals("да", ignoreCase = true)) {
        println("\nКакой ингредиент вы хотите добавить?")
        ingredients.add(readln())
        println("\nТеперь в рецепте есть следующие ингредиенты:")
        ingredients.forEach { println(it) }
    }
}