2 votes

Supprimer la liste de tableaux de l'indice i à i+3

Désolé si cette question est trop facile ou a déjà été posée, je suis nouveau en programmation, j'ai une ArrayList appelée ar déclaré comme ArrayList ar = new ArrayList();

Et j'ai le code suivant :

String delnr = "";
delnr = cin.nextLine();

if(ar.contains(delnr))
{
    for (int i = 0; i < ar.size(); i++)
    {
        if(ar.get(i).equals(delnr))
        {
            ar.remove(i);

            //Here I want to remove i+1 i+2 and i+3 as well.
        }
    }
}

Toute tentative de logique que j'essaie me donne IndexOutOfBounds erreur.

Ma liste de tableaux est de type [dd1, x, y, z, dd2, x, y, z, dd3, x, y, z, ...]

delnr ne peut être qu'un dd1 o dd2 etc.

Donc, en gros, si mon delnr es dd2 Je veux supprimer dd2 et le x , y y z qui viennent après, ma nouvelle liste devrait ressembler à ça :

[dd1, x, y, z, dd3, x, y, z, ...]

1voto

WJS Points 22153

Vous ne pouvez pas utiliser removeRange . Faites-le comme ça. Cela fonctionne parce que le subList est une vue immuable de la liste originale. Ainsi, en changeant la subList modifie la liste originale.

List<Integer> list = new ArrayList<>(List.of(1,2,3,10,20,30,40,4,5,6,7));
System.out.println(list);
list.removeAll(list.subList(3,7));
System.out.println(list);

Imprimés

[1, 2, 3, 10, 20, 30, 40, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]

Dans votre cas, ce serait quelque chose comme

List<Integer> list = 
    new ArrayList<>(List.of(1, 2, 3, 10, 20, 30, 40, 4, 5, 6, 7));
for (int i = 0; i < list.size(); i++) {
    if (list.get(i) == 10) {
        list.removeAll(list.subList(i, i + 4));
    }
}
System.out.println(list);

0voto

Arvind Kumar Avinash Points 49501

La chose la plus importante à comprendre lorsque vous supprimez un élément à l'aide d'un index est que l'élément List se réduit à chaque fois, c'est-à-dire qu'il suffit d'appeler à nouveau remove pour supprimer l'élément suivant, car celui-ci a pris la place du dernier élément supprimé.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(Arrays.asList("c", "b", "a", "d", "e", "j", "k"));
        System.out.println("Original list: ");
        System.out.println(list);

        // Let's say we are searching `a`
        int index = list.indexOf("a");
        if (index != -1 && ((index + 3) < list.size())) {
            // Remove element at index, index + 1, index + 2 and index +3
            list.remove(index);
            list.remove(index);
            list.remove(index);
            list.remove(index);
        }

        System.out.println("Updated list: ");
        System.out.println(list);
    }
}

Sortie :

Original list: 
[c, b, a, d, e, j, k]
Updated list: 
[c, b, k]

Vous pouvez simplifier le code donné ci-dessus en plaçant le code répété dans une boucle comme suit :

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(Arrays.asList("c", "b", "a", "d", "e", "j", "k"));
        System.out.println("Original list: ");
        System.out.println(list);

        // Let's say we are searching `a`
        int index = list.indexOf("a");
        if (index != -1 && ((index + 3) < list.size())) {
            // Remove element at index, index + 1, index + 2 and index +3
            for (int i = 1; i <= 4; i++) {
                list.remove(index);
            }
        }

        System.out.println("Updated list: ");
        System.out.println(list);
    }
}

Sortie :

Original list: 
[c, b, a, d, e, j, k]
Updated list: 
[c, b, k]

Notes :

  1. Lorsque l'élément n'est pas trouvé Liste::indexOf renvoie à -1 .
  2. Il est également important de vérifier (index + 3) < list.size() pour éviter IndexOutOfBoundsException . Par exemple, disons que a a été trouvé à l'index 2 et il n'y avait qu'un seul élément après cela, c'est-à-dire que la liste n'avait que 4 éléments en tout. Dans ce cas, essayer d'accéder ( obtenir o supprimer ) un élément de l'index 4 o 5 jetterait IndexOutOfBoundsException .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X