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

🗒 Задача

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

  • элементы вводятся по одному;

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

  • запрещено использовать список или динамический массив.

Выведи полученные ингредиенты в консоль через запятую.

❌ Ошибки

  • не ошибка — можно рекомендовать сразу объявлять и инициализировать через лямбду

  • используют динамический ArrayList вместо Array

  • если массив инициализирован “” одобрять и предлагать комментарий с доработкой

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

Все корректно!
А еще можно сразу объявлять и инициализировать массив через лямбду
`val array = Array(readln().toInt()) { readln() }`

Попробуй применить этот код и посмотреть как он работает.
Сейчас ты реализовал массив определенного количества ячеек и сразу проинициализировал пустыми строками. 
Это корректно. Вообще чтобы реализовать эту задачу может быть несколько подходов:
 - инициализировать при создании null с помощью [arrayOfNulls](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/array-of-nulls.html)
 - инициализировать каждый элемент сразу при создании. с помощью лямбды. максимально сокращенная форма может выглядеть вот так `Array(readln().toInt()) { readln() }`. здесь задаем и размер, и содержимое.

Предлагаю для разнообразия реализовать, например, еще последний вариант.
Согласно условию нам необходимо создавать массив с определенным количеством ячеек.
Какие есть легальные варианты:
 - инициализировать при создании null с помощью [arrayOfNulls](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/array-of-nulls.html)
 - инициализировать каждый элемент сразу при создании. с помощью лямбды. максимально сокращенная форма может выглядеть вот так `Array(readln().toInt()) { readln() }`. здесь задаем и размер, и содержимое.
Ключевая реализация в этой задаче – это инициализировать пустой (или заполняемый в процессе инициализации) массив определенного количества ячеек.  Какие варианты реализации тут могут быть уместны?)
ArrayList это реализация интерфейса List. То есть это динамически изменяемая сущность.
Нужно создать чистый массив с количеством элементов, которые введет пользователь
Да, смотри, ты проинициализировал массив при создании пробелами, указав " ".
Во 1 если надо просто пустыми строками проинициализировать, достаточно "" (иначе это символ пробела — уже не пустота)
Во 2 можно сделать еще круче – давай сразу инитить вводом элемента с консоли, прямо в лямбде
Смотри, изначально был создан массив с одним строковым элементом. Конструкция `+=` фактически каждый раз пересоздает массив, копируя все предыдущие элементы в новый. Довольно затратная процедура. Согласно ТЗ нам надо с самого начала создать массив с определенным количеством ячеек.

🧾 Решение

fun main() {
    print("Введите количество ингредиентов: ")
    val count = readln().toInt()

    val ingredients = Array(count) { "" }

    for (i in ingredients.indices) {
        print("Введите ингредиент №${i + 1}: ")
        ingredients[i] = readln()
    }

    println("Ваш список ингредиентов: ${ingredients.joinToString()}")
}