public class Solution {
public static void main(String[] args) throws Exception {
// Считать строки с консоли и объявить ArrayList list тут
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> list0 = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list0.add(reader.readLine());
}
ArrayList<String> result = doubleValues(list0);
for (String a: result) {
System.out.println(a);
}
// Вывести на экран result
}
public static ArrayList<String>
doubleValues(ArrayList<String> list1) {
//напишите тут ваш код
// ВОТ ОТ СЮДА, ЧТО ТУТ ПРОИСХОДИТ????
// ЕСЛИ МОЖНО ТО ПОДРОБНЕЕ И ПОСТРОЧНО
// СПАСИБО!!!
for (int i = 0; i < list1.size(); i++) {
list1.add(i, list1.get(i)); ?????????????????
i++; зачем счётчик??????
}
return list1;
}
}
Дмитрий
9 уровень
Нужен профи расклад.
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Дмитрий
19 января 2020, 11:07
Яяя Понял. :))) Спасибо Вам.
+1
{ }
18 января 2020, 16:29
Каждое слово в имеющемся списке мы в список добавляем еще раз, так как дублируем. Особенность списков в том что они флексибильны, в них можно добавлять элементы в любое место а остальные элементы при этом смещаются.
цикл начинает свой путь с позиции 0 на которой находится слово которое нужно дублировать, вопрос как мы дублируем, просто берем слово (как? с помощью list1.get(i)) и это слово добавляем на место (позицию) его же самого те add(i, list1.get(i)) когда мы добавили новый элемент в список, элемент который был на позиции i в нашем случае 0 смещается на позицию i+1 те 1. Так мы продублировали первое слово. Что бы добраться до нового слова нам нужно обойти и первый (который нужно было дублировать) элемент и который мы добавили (дублированный) - для этого помог второй счетчик, но вместо этого можно было в условии цикла сразу написать: i=i+2.
Добравшись до нового слова на позиции i+2 те 2 мы выполняем все тоже самое (добавляем его самого на вторую позицию, а элемент уже имеющийся сдвигается на позицию три) и так до окончания элементов в списке.
надеюсь что стало хоть немножечко яснее)))
+3
София
19 января 2020, 09:39
Спасибо! А что значит это:
for (String a: result) { System.out.println(a); }
0
{ }
19 января 2020, 10:00
Это сокращенное написание цикла for (for each) и здесь используется для вывода результата на экран. Есть лекция (уровень - 8, лекция - 2) посвященная этому - как выводить на экран коллекции и в ней примеры того как он реализуется.
0
Дмитрий
18 января 2020, 07:54
Не могу понять как число дублируется. :(((
0
Андрей
17 января 2020, 20:09
Происходит дублирование каждого значения в списке.
Смотри - у нас есть список [1, 3, 4, 7].
И в результате будет [1, 1, 3, 3, 4, 4, 7, 7].
Как это происходит? В цикле берётся каждое значение, и вставляется на ту же позицию в списке. А то значение, которое дублируется, смещается вправо. И потому индекс у него увеличивается на 1.
Ну а цикл всё ещё продолжается, нацеливаемся на следующее значение. Но, подождите, ведь следующее значение как раз то же самое, дубликат которого и создали! Что же делать? А всё просто - нам нужно перескочить этот элемент.
Но как? Просто увеличиваем значение индекса i++.
И вот так он раз за разом каждый элемент списка дублирует и переходит к следующему, перешагивая через те элементы, которые уже продублировал.
+2