package com.javarush.test.level07.lesson09.task04;

import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList;

/ Буква «р» и буква «л» 1. Создай список слов, заполни его самостоятельно. 2. Метод fix должен: 2.1. удалять из списка строк все слова, содержащие букву «р» 2.2. удваивать все слова содержащие букву «л». 2.3. если слово содержит и букву «р» и букву «л», то оставить это слово без изменений. 2.4. с другими словами ничего не делать. Пример: роза лира лоза Выходные данные: лира лоза лоза /

public class Solution { public static void main(String[] args) throws Exception { BufferedReader bis = new BufferedReader(new InputStreamReader(System.in));

    ArrayList<String> list = new ArrayList<String>();
    list.add("ролл"); //0
    list.add("р1"); //1
    list.add("р2"); //2
    list.add("р"); //2
    list.add("лоза"); //2
    list = fix(list);

    for (String s : list) {
        System.out.println(s);
    }
}

public static ArrayList<String> fix(ArrayList<String> list) {
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).contains("р") && list.get(i).contains("л"))
            continue;

        if (list.get(i).contains("л"))
        {
            list.add(i, list.get(i));
            i++;
        }
        if (list.get(i).contains("р")) {
            list.remove(i);
            i--;
        }

    }return list;
}

}

если изменить местоположение блока в цикле, на удвоение содержимого ячейки памяти содержащей букву л, то программа приходит в абсолютною непригодность, почему?????????????? если поставить вот так

if (list.get(i).contains("р") && list.get(i).contains("л")) continue;

        if (list.get(i).contains("р")) {
            list.remove(i);
            i--;
        }
if (list.get(i).contains("л"))
        {
            list.add(i, list.get(i));
            i++;
        }
Ведь после проверки на две буквы программа должна уходить на следующую итерацию и работать как должно, но нет... ничего подобного, объясните кто может)

задан 23 Янв '16, 07:31

noxior's gravatar image

noxior
1526
одобрено: 21%

закрыто 05 Фев '16, 14:40

AndyRad's gravatar image

AndyRad
13.1k29

Вопрос был закрыт по следующей причине: "The question is answered, right answer was accepted" AndyRad 05 Фев '16, 14:40


i--;
Получается, что сначала выполняется remove - слово удаляется и индекс откатывается назад. И следующий if проверяет уже предыдущее слово, где может быть "л". Сделай if - esle if.

ссылка

опубликован 23 Янв '16, 07:46

AndyRad's gravatar image

AndyRad
13.1k29
одобрено: 47%

изменено 05 Фев '16, 14:40

Если выполняется 1ый if, то continue;
Если выполнился 2ой if, то i-- и в такой ситуации может выполнится 3ий if. Чтобы этого избежать можно 2ой и 3ий if сделать if-else if.

(23 Янв '16, 07:58) AndyRad

аааа, то есть if эти условие должны быть проверены по всему циклу, а else if, если условие подходящие не идет дальше, а при continue уже полюбому переходит к следующей итерации?

(23 Янв '16, 07:51) noxior

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×27

Задан: 23 Янв '16, 07:31

Просмотров: 263 раз

Отредактирован: 05 Фев '16, 14:40