2009-09-27 8 views
2

J'ai un problème avec le code suivant. J'obtiens le message d'erreurProblème avec la classe ArrayList en Java

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.rangeCheck(ArrayList.java:571) 
    at java.util.ArrayList.set(ArrayList.java:364) 
    at Test.main(Test.java:17) 

et je ne comprends pas pourquoi. J'ai une liste, qui est initialisée, puis je la passe en revue, et ensuite je veux remplir une autre liste avec les valeurs de la première liste. Je ne comprends pas pourquoi j'obtiens IndexOutOfBoundsException. Il semble que mon initialisation n'est pas correcte. Merci beaucoup d'avance.

public static void main(String[] args) { 

     String s1 = "one"; 
     String s2 = "one"; 
     ArrayList list = new ArrayList(); 
     list.set(0, s1); 
     list.set(1, s2); 
     Iterator it = list.iterator(); 
     ArrayList listToFill = new ArrayList(); 
     int k = 0; 
     while (it.hasNext()) { 
      String m = "m"; 
      listToFill.set(k, m); 
      k++; 
     } 

    } 

Répondre

11

Vous utilisez la mauvaise méthode pour ajouter des éléments.

Soit:

list.add(0, s1); 
list.add(1, s2); 

ou de préférence:

list.add(s1); 
list.add(s2); 

set tente de remplacer l'élément qui est actuellement là-bas, mais rien est encore là.

More info

3

Vous ne jamais utiliser

it.next(); 

Peut-être que ce n'est pas le point, mais je ne pense pas que vous voulez une boucle infinie.

+0

belle prise, j'ai raté ça. – tster

+0

Merci beaucoup, c'était ma prochaine erreur, à laquelle je n'ai pas pensé. Il fonctionne maintenant :) – user42155

0

Pourquoi diable écrivez-vous ceci pour copier une liste dans une autre?

C'est beaucoup plus succincte:

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

public class ListDemo 
{ 
    public static void main(String[] args) 
    { 

     List<String> l1 = new ArrayList<String>(args.length); 
     for (String arg : args) 
     { 
     l1.add(arg); 
     } 
     System.out.println("l1: " + l1); 
     List<String> l2 = new ArrayList<String>(l1); 
     System.out.println("l2: " + l2); 
    } 
} 
+4

Encore mieux: Collections.copy (l2, l1); –

+3

ou l2.addAll (l1); – tster

+2

'Liste l1 = Arrays.asList (args); Liste l2 = new ArrayList (l1); ' –

0

Lorsque vous avez une trace de la pile THN l'utiliser pour savoir où l'accident est arrivé! Ici le put() est un cadeau mort à reinvastigate dans le javadoc.

Questions connexes