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

  • Votes
  • Date
  • Date décroissante
  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. https://openclassrooms.com/fr/courses
      tu doit apprendre a gérer les exceptions
      1. Modérateur
        ArrayIndexOutOfBoundsException est une RuntimeException, elle n'a pas à être gérée !
      2. Oui je comprend, quelle est alors la manip pour trouver l'erreur ?
      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...
    2. Merci pour le i transformé en j.
      Mais malheureusement cela ne résout pas le problème.
      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++) 
      2. En effet c'était bien ça. POuvez vous m'expliquer mon erreur, enfin ce que cela produisait ? Merci
      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.
      4. Ok merci !