Public class Solution {
public static void main(String[] args) {
ArrayList strings = new ArrayList();
strings.add("роза");
strings.add("лоза");
strings.add("лира");
strings = fix(strings);
for (String string : strings) {
System.out.println(string);
}
}
/* ПОЯСНЕНИЕ:
Метод Fix, который должен удалить слово, если в нем есть Р,
и скопировать, если в нем есть Л.
Я хочу, чтобы после удаления слова ( т. к. арей сдвигается ), for прошелся по следующему
if с тем же индексом. Т. е. я хочу, чтобы i-- произошло один раз, но он входит в бесконечный луп */
public static ArrayList fix(ArrayList strings) {
for( int i = 0; i < strings.size() -1; i++ ){
String str = strings.get(i);
if ( str.contains("р") ) {
strings.remove(str);
i--;
}
if ( str.contains("л") ) strings.add(i, str);
}
return strings;
}
}
Java
JAVA, почему программа входит в бесконечный loop
а ты распечатывай i и поймёшь куда ведут твои безобразия с изменением переменной цикла...
что у тебя произойдёт при обработке первого слова в списке?
чему станет равна переменная i?
ЕСЛИ блок для проверки на содержание буквы "л" будет пытаться проверить удалённое слово, которого не существует...
что сделает твоя программа со словами в которых нет этих двух букв?
что сделает твоя программа, если в слове есть и "р" и "л"?...
будь проще... сделай новый пустой список... и добавляй в его слово когда условие подходит и нужное количество раз...
что у тебя произойдёт при обработке первого слова в списке?
чему станет равна переменная i?
ЕСЛИ блок для проверки на содержание буквы "л" будет пытаться проверить удалённое слово, которого не существует...
что сделает твоя программа со словами в которых нет этих двух букв?
что сделает твоя программа, если в слове есть и "р" и "л"?...
будь проще... сделай новый пустой список... и добавляй в его слово когда условие подходит и нужное количество раз...
Попробуй ретурн закоментить
Ivan Covas
return должен остаться, метод должен возвращать массив
1) роза у вас идет первым елементом,
текущий i=0, первый if удаляет роза, (осталось два елемента лоза, лира), текущий елемент уходит в -1.
2) следущая итерация, i=0 (-1+1), второй If создает 'лоза' первым елементом (0) в массиве (лоза (новая), лоза, лира). остальные смещаются вправо.
3) сл. итерация. i=1, второй иф создает во втором елементе массива опять (лоза). (лоза, лоза (новая), лоза, лира)
4) сл. итерация. i=2.
(лоза, лоза, лоза (новая), лоза, лира)
... как вы видите infinitive loop
если брать ваш алгоритм, то добавление слова, надо бы делать за провеочным словом, и соответсвенно прокучивить i:
if ( str.contains("л") ) { i++; strings.add(i, str);}
еще у вас ошибка в цикле: i < strings.size() -1 (чем это вам последний елемент не угодил?)
vs
i < strings.size()
текущий i=0, первый if удаляет роза, (осталось два елемента лоза, лира), текущий елемент уходит в -1.
2) следущая итерация, i=0 (-1+1), второй If создает 'лоза' первым елементом (0) в массиве (лоза (новая), лоза, лира). остальные смещаются вправо.
3) сл. итерация. i=1, второй иф создает во втором елементе массива опять (лоза). (лоза, лоза (новая), лоза, лира)
4) сл. итерация. i=2.
(лоза, лоза, лоза (новая), лоза, лира)
... как вы видите infinitive loop
если брать ваш алгоритм, то добавление слова, надо бы делать за провеочным словом, и соответсвенно прокучивить i:
if ( str.contains("л") ) { i++; strings.add(i, str);}
еще у вас ошибка в цикле: i < strings.size() -1 (чем это вам последний елемент не угодил?)
vs
i < strings.size()
луп-залуп
Похожие вопросы
- Работа со строками Java Разработать программу, которая вводит строку и находит все слова указанной длины n (n вводится).
- Подскажите пожалуйста, как в данном коде Java сделать так, чтоб при нажатии цифры 3 программа завершала свою работу?
- Помогите разобрать программу java
- Написать программу на языке java
- Как создать программу (Java), чтобы была не консольной, а с интерфейсом GUI
- Всем привет. Помогите плз. Мне нужна помощь тех кто действительно хорошо знает Java т. к мне нужно выбрать один из курсов
- Почему вакансий программистов c# меньше, чем вакансий java?
- Java.Комментирование. Надо прокомеентировать каждую строку этой программы.
- Почему Android Studio написана на Java а не на С/С++?
- Помогите доделать код на java. В форму пользователь вводит символ, который нужно заменить на #.