Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept

Résolu
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.

3 réponses

  1. Modérateur
    Tu as mélangé i et j : (int j=0;i<joueur1_pioche.length;j++)
    Ici c'est un j qu'il faut mettre !
    1
    1. https://openclassrooms.com/fr/courses
      tu doit apprendre a gérer les exceptions
      1
      1. Modérateur
        ArrayIndexOutOfBoundsException est une RuntimeException, elle n'a pas à être gérée !
        0
      2. Oui je comprend, quelle est alors la manip pour trouver l'erreur ?
        0
      3. Modérateur
        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...
        0
    2. Merci pour le i transformé en j.
      Mais malheureusement cela ne résout pas le problème.
      0
      1. Modérateur
        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++) 
        0
      2. En effet c'était bien ça. POuvez vous m'expliquer mon erreur, enfin ce que cela produisait ? Merci
        0
      3. Modérateur
        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.
        0
      4. Ok merci !
        0