2017-10-16 2 views
-5

J'ai un problème avec ce codeException dans le thread "principal" java.lang.IndexOutOfBoundsException: Index: 6, Taille: 6

List<String> listaTags = new ArrayList<String>(); 





    int i = 0; 
    String current = listaTags.get(i); 

    while (listaTags.size() > 1 && listaTags.contains("/".concat(current)) != current.contains("/")) { 

     if (current.equals(listaTags.get(i + 1))) { 

      listaTags.remove(current); 
      listaTags.remove(listaTags.get(i + 1)); 

      if (i < 0) { 
       i++; 
      } 
     } 

     i++; 

    } 

    System.out.println("errore nel codice"); 

} 

listatags a six éléments

l'erreur est:

Exception dans le thread "principal" java.lang.IndexOutOfBoundsException: Index: 6, Taille: 6

Quelqu'un peut-il m'aider?

+0

Le 'if (i <0)' déclaration peut être retirée - il n'y a aucun moyen que je peux être inférieur à zéro. Votre indice IndexOutOfBoundsException arrive probablement après quelques cycles dans la boucle - la valeur current ne change jamais donc la boucle continuera indéfiniment (vous voudrez probablement avoir 'String current =' dans la boucle while.) – Stefan

+0

Les index dans une liste sont basés sur zéro, donc si la liste a 6 éléments, alors les valeurs d'index valides sont 0 à 5 (inclus), 6 est un index invalide – Jesper

+0

si la liste a 6 éléments, alors les index de ces éléments sont de 0 à 5. L'élément 6 n'existe pas – mlecz

Répondre

0

cette ligne

if (current.equals(listaTags.get(i + 1))) 

jette une exception parce que dans « tout » chaque taille de la liste de temps est supérieur à 1 et votre valeur i atteint la valeur qui est supérieure à la taille de la liste.

0

Depuis la taille de la liste est de 6, donc les index sont 0,1,2,3,4,5 (ce qui est la valeur de i dans ce cas)

Vous êtes toujours d'augmenter la valeur de i par 1 et quand il est i = 5, il lance IndexOutOfBoundsException.

En tant que solution que vous pouvez faire

if (i < 5 && current.equals(listaTags.get(i + 1))) {...}