проверьте arraylist с самого начала после удаления элемента - PullRequest
0 голосов
/ 18 марта 2020

Получил список элементов:

String[] temp = new String[]{"NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"};
ArrayList<String> list = new ArrayList<>(Arrays.asList(temp));

Мне нужно вернуться к началу l oop после удаления элементов из ArrayList

удаления элементов "NORTH" и "SOUTH" если они последовательны:

for (int i = 0; i < list.size() - 1 ; i++) {

    if (list.get(i).equals("NORTH") && list.get(i + 1).equals("SOUTH")) {
        list.remove(i);
        list.remove(i);
    }
    if (list.get(i).equals("SOUTH") && list.get(i + 1).equals("NORTH")) {
        list.remove(i);
        list.remove(i);
    }

, код выше удаляет элементы "NORTH" и "SOUTH" и продолжает проверять элементы, но с этим условием:

    if (list.get(i).equals("SOUTH") && list.get(i + 1).equals("NORTH")) {
        list.remove(i);
        list.remove(i);
    }

Мне нужно вернуться к первое условие после удаления элементов.

Как это сделать?

1 Ответ

0 голосов
/ 18 марта 2020

Самый простой способ - уменьшить i на 1 и продолжить l oop, поэтому в следующем раунде, когда i будет увеличен, вы вернетесь к первым if и i то же самое, что и раньше:

for (int i = 0; i < list.size() - 1 ; i++) {
    if (…) {
        list.remove(i);
        list.remove(i);
        i--;
        continue;
    }
    if (…) {
        list.remove(i);
        list.remove(i);
        i--;
        continue;
    }
}

Или, если вы не хотите использовать оператор continue, вы можете использовать else-if, поэтому второе условие не будет выполнено для i-1:

for (int i = 0; i < list.size() - 1 ; i++) {
    if (…) {
        list.remove(i);
        list.remove(i);
        i--;
    }
    else if (…) {
        list.remove(i);
        list.remove(i);
        i--;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...