Java problème ArrayList

Fermé
m0rph3us - 20 avril 2005 à 22:01
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 20 avril 2005 à 22:59
bonsoir bonsoir,

voilà, j'ai un projet à faire pour mon cour de java, le jeu du tyrus.
enfet voilà le problème, j'ai une class Caste (Voir ci-dessous) dans laquel je met chaque objet créé dans une ArrayList..
Mais le problème est la dans mon constructeur Caste.
Si je fais une class test qui avec la commande : Caste caste=Caste.SOLDATS;
, j'obtiens l'erreur suivante:


----------------------------------------------------------------------------
Exception in thread "main" java.lang.ExceptionInInitializerError
at Test.main(Test.java:17)
Caused by: java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
at java.util.ArrayList.add(ArrayList.java:367)
at Caste.<init>(Caste.java:27)
at Caste.<clinit>(Caste.java:97)
... 1 more
----------------------------------------------------------------------------

Si maintenant au lieu de mettre indice dans: list.add(indice,this);
et que je mette zero --> list.add(0,this);
il le prend !!
si mnt je met 1 ou 2 ou peu importe ---> list.add(1,this);
il me refait la meme erreur

Donc voila je comprends pas trop ce quil se passe.
Si quelq'un pourais eclairé ma tite lenterne sa serais sympa :)
merci








import java.util.*;

public class Caste
{

private String nom;
private int indice;
private int nb=0;
private Caste random;

public static final ArrayList list= new ArrayList();

public Caste(String nom)
{
this.nom=nom;


if(this.nom.equals("soldats"))indice=2;
else
{
if(this.nom.equals("pretres"))indice=1;
else indice=0;
}

list.add(indice,this);
}


public static final Caste SOLDATS= new Caste("soldats");
public static final Caste PRETRES= new Caste("pretres");
public static final Caste MARCHANDS= new Caste("marchands");

}
A voir également:

1 réponse

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
20 avril 2005 à 22:59
C'est normal, lorsque tu met :
 public static final ArrayList list= new ArrayList();

Java te créé un objet de type arraylist qui contient des arraylist mais de taille 0, c'est à dire qu'il contient aucun élément. Donc quand tu met :
 list.add(indice,this);

Ce n'est pas possible, tu ne peux pas mettre l'élément 2 avant 0 ou 1, pour cela, il faut que tu fasse un Vector de arraylist :
public static final ArrayList list= new Vector();

Et dans ton constructeur, tu met bien :
for(int i = 0; i<3 ;i++) {
    list[i] = new ArrayList();
}
Et tu pourra, normalement accèder à tes différentes arraylist par la suite :
((ArrayList)list.getElementAt[i]).add(this);


Mais n'oublie que quand tu veux faire qqchose dans une de tes arraylist, il faut en premier la prendre du vector, puis la caster ne ArrayList car ce qui sort d'un Vector est de type Object.

Bon, ya peut être deux trois truc qui ne sont pas bon (point de vu syntaxique) mais l'idée est celle la.

++
0