import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
Удваиваем слова
*/
public class Solution {
public static void main(String[] args) throws Exception {
ArrayList<String> list = new ArrayList<>();
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
for (int i=0; i<10; i++){
String s = r.readLine();
list.add(s);// Считать строки с консоли и объявить ArrayList list тут
}
ArrayList<String> result = doubleValues(list);
for (int i=0; i<list.size(); i++) {
System.out.println(result);
}// Вывести на экран result
}
public static ArrayList<String> doubleValues(ArrayList<String> list) {
for (int i=0; i<list.size(); i++){
list.add(list.get(i));//напишите тут ваш код
}
return list;
}
}
Вот такой результат :
q
w
e
a
s
d
y
x
c
r
f
v
t
g
b
z
h
n
u
j
m
i
k
o
l
p
ö
ü
ä
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3721)
at java.base/java.util.Arrays.copyOf(Arrays.java:3690)
at java.base/java.util.ArrayList.grow(ArrayList.java:237)
at java.base/java.util.ArrayList.grow(ArrayList.java:242)
at java.base/java.util.ArrayList.add(ArrayList.java:485)
at java.base/java.util.ArrayList.add(ArrayList.java:498)
at com.javarush.task.task07.task0717.Solution.doubleValues(Solution.java:29)
at com.javarush.task.task07.task0717.Solution.main(Solution.java:20)
Process finished with exit code 1
Koluber
17 уровень
Почему цикл ввода не останавливается на 10-ти строках. Продолжает дальше просить ввести строки. От 22 до 29 строк, по разному.?
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Артём
3 января 2020, 22:30
Дело здесь в том, что ты добавляешь элементы в тот список, из которого ты эти же элементы считываешь. Смотри, цикл идёт по первому элементу списка, удваивает его. Затем, естественно, он переходит ко второму элементу. А вторым элементом теперь является копия первого, и из-за этого порядок сбивается. Элементы начинают копироваться до бесконечности. Но, как я понял, в джаве есть внутренние ограничения для этого случая, поэтому, когда какое-то количество памяти забивается дубликатами, программа крашится.
Возвращаясь к твоей программе: используй второй список. Вместо добавления элементов в изначальный список, добавляй элементы в новый по 2 раза, всё получится)
0
ГоффMaster
3 января 2020, 22:15
Вот намёк:
+1
Koluber
3 января 2020, 22:27
То есть цикл, в котором я хочу удвоить. Как то влияет на цикл, в котором ввожу строки? Благодарю.
0
ГоффMaster
3 января 2020, 22:28
нет. в цикле, который удваивает, критерий его окончания постоянно изменяется внутри цикла
0
ГоффMaster
3 января 2020, 22:30решение
У тебя вводится 10 первых, всё правильно. Потом машина уходит в бесконечный цикл и думает о своём. В этот момент консоль открыта и тебе кажется, что машина просит ещё чего-нибудь ввести. Но она ничего не просит - она другим занята в это время.
+2
Koluber
3 января 2020, 22:34
Блииин. Вот об этом не подумал. Благодарю.
0