Иногда задание — это просто задание. Без подвоха, и не стоит искать в нём сложности и глубины. Нужно просто сесть и решить. Перед нами — именно такое задание. Смотрите, как все внятно и просто: создайте массив, элементами которого будут списки строк. А потом заполните массив любыми данными и выведите их на экран.
Массив списков строк
- 6
- Недоступна
Комментарии (158)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Mikhail Nartov 12 уровень
позавчера, 14:54
Ставь лайк, если проинициализировал массив, но забыл создать каждый список в нем :)
0
Anonymous #2337929 13 уровень
23 декабря 2020, 19:10
Вот эта запись
Это массив списков. То есть, элемент массива не строка или число, а всего лишь список (другой массив, но воспринимать его нужно просто как элемент сначала, без усложнения, поэтому лучше называть его сейчас именно "список", чтобы не путаться).
Поэтому, чтобы что-то в этот список добавить, нужно сначала его создать. Как мы обычно создаем списки(для примера):
Только в данной задаче, поскольку мы действуем внутри обычного массива, мы просто заменяем первую часть
на
где i - это индекс элемента нашего основного массива.
А дальше, когда все списки созданы, мы уже спокойно добавляем в них элементы.
Вот такое понимание,наконец, пришло спустя два дня размышлений над этой конструкцией. Если оно верное, то может кому-то еще поможет, у кого тоже пока есть сложности с абстрактным мышлением. +5
Ksenia 24 уровень, Киев
12 ноября 2020, 14:01
полезная ссылочка на статью хабр про вариантность (Wladyslaw ниже писал про инвариантность и ковариантность)
+супер понятное видео про вариантность в ArrayList
+3
Anton Dityatev 13 уровень, Северодвинск
9 января, 15:42
за видео отдельное спасибо. хороший контент
0
🦔 Виктор админ Java Android канала в telegram @LetsCodeItExpert
8 ноября 2020, 21:38
Не уловил смысловой нагрузки задачи, по-моему учат плохому.
Самое сложно — это понять, что хотят, меня вот с толку сбили списки строк в ТЗ, ну, почему не написать списочный массив из строк, а?
И, собственно, инициализация этого массива списочных массивов, тут объясняется как это сделать и почему НЕ стоит так делать.
1. Создаём пару списочных массивов с типом строки.
2. Закидываем в них для виду хотя бы по одной строке.
3. Создаём массив списочных массивов с типом строки: СписочныйМассив<Строка>[] названиеМассива = новый СписочныйМассив[размерМассива];
4. На этом пункте я просидел около часа, забыв, что это обычный массив и пытаясь в него запихнуть списочные массивы через метод добавить(), а не оператор =
5. Всё получится, но, задача такая себе...
--
tlgrm: LetsCodeIt / SefoNotasi
+6
Степан 17 уровень
30 октября 2020, 12:33
Лехко
+1
Степан 17 уровень
30 октября 2020, 12:34
Хотя нет
+5
Максим Бучинский 15 уровень, Минск
29 октября 2020, 07:57
+2
Алексей Морозов 16 уровень, Краснодар
28 октября 2020, 20:36
0
Алексей Морозов 16 уровень, Краснодар
28 октября 2020, 20:38
... но валидатор не пропускает.
0
Эндер Посол с красной планеты в четвёртом измерении
26 октября 2020, 12:25
Кто-нибудь знает, почему данный код проходит:
Но на это компилятор ругается:
❓❓❓❓❓❓❓❓❓❓❓❓❓ +1
Wladyslaw 41 уровень, Warsaw Master
30 октября 2020, 16:14
Если коротко - из-за стирания типов.
Отчасти потому дженерики инвариантны, в отличии от массивов - которые ковариантны. Это значит что если String - потомок Object, то String[] - потомок Object []. Но List<String> - не является потомком List<Object>.
Соответственно компилятор не позволит ссылаться на лист стрингов ссылкой на лист объектов, например. Но, если бы мы могли создавать массив дженериков - то было бы возможно вот такое потому что массивы ковариантны и ссылка на массив объектов может ссылаться на любой массив.
Последняя строчка кинет ClassCastException. А дженерики задумывались для того чтобы обеспечить типобезопасность. Неудобно как-то выходит. Потому возможность создавать массив дженериков убрали проверяя это ещё на этапе компиляции.
С массивами такой финт тоже возможен, но там исключение будет кинуто сразу при попытке добавления. А чем раньше возникла ошибка - тем она дешевле. А ввиду того что дженерики работают через стирание типов - тип-параметр в рантайме просто не доступен и дженерик не может проверить что в него ложат. И вот в вышеописаном случае возникает потенциальная типонебезопасность. Ошибка, которая не известно когда себя проявит. Только тогда когда кто-то попробует из элемента такого массива что-то вытащить.
Вот потому и нельзя.
А в первом варианте ты используешь сырой тип и дженерики просто снимают с себя всю ответственность и никаких гарантий тебе не дают. Упадет - ну сам виноват.
Но в реальности так делать не стоит +3
Евгений Кафанов 16 уровень, Москва
2 ноября 2020, 11:21
Почему тогда неизвестная ошибка, что нельзя было описать ошибку.
0
Wladyslaw 41 уровень, Warsaw Master
2 ноября 2020, 11:26
Почему неизвестная?
0
Евгений Кафанов 16 уровень, Москва
24 ноября 2020, 16:42
У меня писала неизвестная ошибка компиляции
0
Druha 28 уровень
15 октября 2020, 18:37
Мда... массив коллекций
+1
Сэм Фишер 23 уровень, Кишинев
13 октября 2020, 07:24
прошел такой вариант:
что интересно, когда добавил 0-й элемент, валидатор не пустил, добавил второй элемент и все прошло... +2
Kostik 13 уровень, Москва
16 октября 2020, 11:59
там написано заполнить массив, а у тебя из 2 мест было 1 заполнено
0