Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept
Résolu
Rhegar
Messages postés
10
Statut
Membre
-
9 mars 2013 à 17:13
Rhegar Messages postés 10 Statut Membre -
Rhegar Messages postés 10 Statut Membre -
Bonjour,
Je suis en train d'essayer de coder une partie de domino sous Java.
public class Domino
{
public static void main (String args[])
{
ArrayList<int []> pioche=new ArrayList<int []>();
Random gen = new Random();
for (int i=0;i<7;i++)
{
for (int j=0;j<=i;j++)
{
pioche.add(new int[]{i,j});
System.out.print("("+ i + ", " + j + ") ");
}
System.out.println();
}
int[][] joueur1_pioche=new int[7][49];
int[][] joueur2_pioche=new int[7][49];
int [] main_du_joueur1 = null;
int [] main_du_joueur2 = null;
for (int i=0;i<joueur1_pioche.length;i++)
{
main_du_joueur1=pioche.get(gen.nextInt(pioche.size()));
main_du_joueur2=pioche.get(gen.nextInt(pioche.size()));
pioche.remove(main_du_joueur1);
pioche.remove(main_du_joueur2);
joueur1_pioche[i] = main_du_joueur1;
joueur2_pioche[i] = main_du_joueur2;
}
System.out.println("\nPioche\tJoueur 1\tJoueur 2");
for (int i=0;i<joueur1_pioche.length;i++)
{
System.out.print((i+1) +": \t ");
for (int j=0;i<joueur1_pioche.length;j++)
{
System.out.print(joueur1_pioche[i][j] + " ");
Et la je reçois une erreur du type Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept correspondant à la dernière ligne du code ci dessus.
Je pense que cela à avoir avec le int[][] joueur1_pioche=new int[7][49]; mais je ne vois pas ou.
Merci bien.
Je suis en train d'essayer de coder une partie de domino sous Java.
public class Domino
{
public static void main (String args[])
{
ArrayList<int []> pioche=new ArrayList<int []>();
Random gen = new Random();
for (int i=0;i<7;i++)
{
for (int j=0;j<=i;j++)
{
pioche.add(new int[]{i,j});
System.out.print("("+ i + ", " + j + ") ");
}
System.out.println();
}
int[][] joueur1_pioche=new int[7][49];
int[][] joueur2_pioche=new int[7][49];
int [] main_du_joueur1 = null;
int [] main_du_joueur2 = null;
for (int i=0;i<joueur1_pioche.length;i++)
{
main_du_joueur1=pioche.get(gen.nextInt(pioche.size()));
main_du_joueur2=pioche.get(gen.nextInt(pioche.size()));
pioche.remove(main_du_joueur1);
pioche.remove(main_du_joueur2);
joueur1_pioche[i] = main_du_joueur1;
joueur2_pioche[i] = main_du_joueur2;
}
System.out.println("\nPioche\tJoueur 1\tJoueur 2");
for (int i=0;i<joueur1_pioche.length;i++)
{
System.out.print((i+1) +": \t ");
for (int j=0;i<joueur1_pioche.length;j++)
{
System.out.print(joueur1_pioche[i][j] + " ");
Et la je reçois une erreur du type Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept correspondant à la dernière ligne du code ci dessus.
Je pense que cela à avoir avec le int[][] joueur1_pioche=new int[7][49]; mais je ne vois pas ou.
Merci bien.
A voir également:
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept
- Deco in paris avis ✓ - Forum Consommation & Internet
- Navigation in private - Guide
- Aux in ✓ - Forum Enceintes / HiFi
- Peut-on brancher un casque sur une prise auxiliaire ? - Forum Casque et écouteurs
- Dc in - Forum Disque dur / SSD
3 réponses
KX
Messages postés
16761
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 août 2025
3 020
9 mars 2013 à 17:17
9 mars 2013 à 17:17
Tu as mélangé i et j : (int j=0;i<joueur1_pioche.length;j++)
Ici c'est un j qu'il faut mettre !
Ici c'est un j qu'il faut mettre !
https://openclassrooms.com/fr/courses
tu doit apprendre a gérer les exceptions
tu doit apprendre a gérer les exceptions
KX
Messages postés
16761
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 août 2025
3 020
9 mars 2013 à 17:20
9 mars 2013 à 17:20
ArrayIndexOutOfBoundsException est une RuntimeException, elle n'a pas à être gérée !
KX
Messages postés
16761
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 août 2025
3 020
9 mars 2013 à 17:25
9 mars 2013 à 17:25
Comme elles ne sont généralement pas rattrapés (puisqu'elle proviennent a priori d'une erreur dans le code) ces exceptions arrêtent le programme et s'affichent. Il suffit donc de lire l'exception pour savoir où et pourquoi ça a planté.. Par exemple ici, on a aurait le numéro de ligne et l'indice qui a planté (qui correspond à l'indice j==joueur1_pioche[i].length, c'est à dire 49), puisque c'est le premier indice qui plante...
Merci pour le i transformé en j.
Mais malheureusement cela ne résout pas le problème.
Mais malheureusement cela ne résout pas le problème.
KX
Messages postés
16761
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 août 2025
3 020
9 mars 2013 à 17:22
9 mars 2013 à 17:22
En effet, l'erreur est plus grave que ça, parce que c'est toute ta condition d'arrêt qui est fausse, en effet la taille du tableau joueur1_pioche[i] est joueur1_pioche[i].length, et non joueur1_pioche.length.
for (int j=0; j<joueur1_pioche[i].length; j++)
KX
Messages postés
16761
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 août 2025
3 020
9 mars 2013 à 17:27
9 mars 2013 à 17:27
Tu as juste fait un mauvais copier-coller. joueur1_pioche.length==7 et joueur1_pioche[i].length==49, tu ne peux pas utiliser l'un à la place de l'autre alors que les valeurs sont différentes.