🗒 Задача¶
Напиши программу, которая запрашивает у пользователя пять названий ингредиентов (каждый по отдельности).
-
результат должен исключать повторы;
-
список должен выводиться в алфавитном порядке;
-
все элементы списка выведены в одну строку, разделяя слова запятыми;
-
первый элемент должен быть распечатан с заглавной буквы.
❌ Ошибки¶
-
не создают 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() }
)
}