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

🗒 Задача

Напиши программу, которая запрашивает у пользователя пять названий ингредиентов (каждый по отдельности).

  • результат должен исключать повторы;

  • список должен выводиться в алфавитном порядке;

  • все элементы списка выведены в одну строку, разделяя слова запятыми;

  • первый элемент должен быть распечатан с заглавной буквы.

❌ Ошибки

  • не создают set — намекать на коллекцию, которая не умеет хранить повторы

  • предлагать объединять в sortedSetOf()

  • используют sort() вместо sorted()

  • используют deprecated методы

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

Хорошо! но теперь давай сделаем еще лучше. А именно. посмотри или вспомни какая коллекция не умеет хранить повторы?
Вот в нее можно превратить проинициализированный введенными значениями список.
Отлично! есть еще более оптимальный способ - создавать сразу отсортированную коллекцию. Вот так [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted-set-of.html](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted-set-of.html)
'capitalize(): String' is deprecated. Use replaceFirstChar instead.

Метод capitalize является устаревшим и не поддерживаемым (deprecated). Нужна альтернатива. Попробуй изучить подсказку в IDEA и доработать на актуальный метод
Мы уже умеем организовывать хороший код без повторений, поэтому предлагаю начать с того, что считывать данные будем в цикле, а не хардкодить)
Хорошая реализация, давай сделаем еще лучше. Попробуй реализовать отсутствие повторов, используя коллекцию, которая не умеет хранить повторы.
Верный выбор Set. но нет необходимости создавать новый пустой список. Можно список приводить к set методом toSet()
Не забывай прожимать автоформатирование перед коммитом, увидишь как будет иногда сильно трансформироваться код)
Тут точка все еще просто часть строки, а не списка. Предлагаю искать последний элемент, например, через `lastIndex` и к нему конкатенировать точку
Только первый элемент должен быть с заглавной буквы
Изучи повнимательнее `joinToString`. В методе есть параметры, которые позволяют создать строку сразу с нужными разделителями.

🧾 Решение

fun main() {

    println("Введите ниже 5 ингредиентов, каждый ингредиент нужно ввести с новой строки:")
    val ingredients = MutableList(5) { readln().trim() }.toSet().sorted()

    println("\nВаши ингредиенты:")
    println(
        (ingredients.joinToString(separator = ", ", postfix = "."))
            .replaceFirstChar { it.uppercase() }
    )

}