Java problème ArrayList
m0rph3us
-
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
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");
}
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:
- Java problème ArrayList
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
1 réponse
C'est normal, lorsque tu met :
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 :
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 :
Et dans ton constructeur, tu met bien :
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.
++