Подскажите пожалуйста, что упустил или неправильно сделал. Не могу понять.
import java.util.ArrayList;
public class Task794 {
public static void main(String [] args) {
ArrayList <String> words = new ArrayList<>();
words.add("роза");
words.add("лира");
words.add("лоза");
words.add("мама");
words = fix(words);
for (String string : words) {
System.out.println(string);
}
}
//метод fix удаляет все слова, содержащие букву "р"
//удваивает все слова, содержащие букву "л"
// если слово соержит буквы "л" и "р" оставляет без изменений
// с другими словами ничего не делает
public static ArrayList<String> fix(ArrayList<String> words) {
for (int i = 0; i < words.size(); i ++) {
if (words.get(i).contains("р") && words.get(i).contains("л")) {
words.get(i);
}
else if (words.get(i).contains("р")) {
words.remove(i);
}
else if (words.get(i).contains("л")) {
words.add(i+1, words.get(i) );
}
}
return words;
}
}
Константин
23 уровень
Не компилируется "р" и "л"
Решен
Комментарии (18)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Константин
2 декабря 2019, 22:09
как я понял, я туплю с передачей ArrayList<> в метод, но не пойму что делать нужно..
0
Константин
2 декабря 2019, 20:57
выдает ошибку, просто комп подвисает
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.grow(Unknown Source)
at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at Seven.Task794.fix(Task794.java:39)
at Seven.Task794.main(Task794.java:14)
0
Ksenia Volkova Java Developer в DXC Master
2 декабря 2019, 20:59
Ну так все компилируется. Просто у тебя там бесконечный цикл - вот и ошибка.
Пока памяти хватает - он выполняется. Когда память заканчивается - выдает ошибку.
0
Константин
2 декабря 2019, 21:02
а почему бесконечный цикл, у меня же стоит ограничение до i < words.size()?
Непонимаю..
0
Ksenia Volkova Java Developer в DXC Master
2 декабря 2019, 20:56
А как ты определяешь, что не компилируется, если нет ошибки?
0
Константин
2 декабря 2019, 20:49
я в еклипсе пробую решать, с нуля набираю код, потом в интеледж переношу по заданию. Скажем так, пробую работать в двух средах.
0
Ksenia Volkova Java Developer в DXC Master
2 декабря 2019, 20:54
Не знаю, что там у тебя в эклипсе, но здесь такая задача не пройдет. Нужен конкретный класс в конкретном файле.
0
Константин
2 декабря 2019, 21:06
я знаю что не пройдет, я потом в идею когда переношу, делаю по заданию через плагин, а там названия все встроены. Получается двойное закрепление материала, что ли. Бывает решаю задачи, потом возвращаюсь на пройденные уровни и опять туплю))) Не сказал бы что мне легко прям дается Java, но я ее добью.
0
Влад Java Developer в Tinkoff
2 декабря 2019, 21:28
А почему вы сразу в Idea не пишите?
0
Константин
2 декабря 2019, 21:36
мне еклипс нравится, меньше памяти забирает. Начинал с него по книге Барри Берда, а это имеет отношение к вопросу по задаче, на чем я работаю? вот например я еще бы JShell бы попробовал, но пока что-то не въеду в него.
0
Влад Java Developer в Tinkoff
2 декабря 2019, 22:14
Нет, я просто поинтересовался.
0
Константин
2 декабря 2019, 22:18
а по моему вопросу есть мнение, направишь?
0
Влад Java Developer в Tinkoff
2 декабря 2019, 22:25
У вас постоянно добавляется лоза.Попробуйте когда создаёте дубликат слова увеличивать счётчик i (i++).
0
Влад Java Developer в Tinkoff
2 декабря 2019, 22:29
И когда удаляете слово , уменьшать счётчик .
0
Константин
2 декабря 2019, 22:41
теперь работает, но я не понял механизм, мы же когда, например. удаляем слово, проверяем по индексу i, и его же удаляем. Разве ArrayList не сдвигает автоматически после удаления?
else if (words.get(i).contains("р")) {
words.remove(i--);
0
Влад Java Developer в Tinkoff
2 декабря 2019, 22:51решение
Сдвигает. Например, у вас ArrayList содержит:
Вы начинаете проверку int i = 0;
Проверяете элемент по индексу 0 = "роза" , мы его удаляем.И ArrayList сдвигает индексы.
У нас теперь:
Но, далее проверку вы выполняете по индексу 1 , так как увеличиваете его
и соответственно пропускаете слово "рот". +2
Константин
2 декабря 2019, 22:58
теперь понял, спасибо за помощь ;)
0
Ksenia Volkova Java Developer в DXC Master
2 декабря 2019, 20:46
А почему такое имя у класса интересное?
0