Java.lang.ArrayIndexOutOfBoundsException: 1

Bonjour,
mon prg affiche le message suivant, aidez moi svp

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Divers3.main(Divers3.java:15)

import java.util.Scanner;
public class Divers3
{
public static void main(String[] args)
{
int i, j, posi, posj, i2, j2,dep = 0;
posi=0;
posj=0;
boolean correct,moveOk;
boolean[][] damier = new boolean [7][7];
int[][]mouv=new int [3][1];

//choix 0:pion en haut à droite
mouv[0][0]=-1;
<strong>mouv[0][1]=-1;</strong>

//choix 1:pion en haut à gauche
mouv[1][0]=-1;
mouv[1][1]=1;

//choix 2:pion en bas à gauche
mouv[2][0]=1;
mouv[2][1]=-1;

//choix 3:pion en bas à droite
mouv[3][0]=1;
mouv[3][1]=1;

//initialisation du damier; le pion n'est pour le moment nulle part
for(i=0;i<damier.length;i++)
{
for(j=0;j<damier.length;j++)
{
damier[i][j]=false;
}
}
//saisie de la coordonée en i (posi)avec contrôle de saisie
correct=false;
while(!correct)
{
System.out.println("Entrez la ligne de votre pion:");
Scanner sc=new Scanner(System.in);
posi=sc.nextInt();
if(posi>=0 && posi<=7)
{
correct=true;
}
}
//saisie de la coordonée en j (posj)avec contrôle de saisie
correct=false;
while(!correct)
{
System.out.println("Entrez la colonne de votre pion:");
Scanner sc=new Scanner(System.in);
posj=sc.nextInt();
if(posj>=0 && posj<=7)
{
correct=true;
}
}
//positionnement du pion sur le damier virtuel
damier[posi][posj]=true;
//saisie du déplacement, avec contrôle
System.out.println("Quel déplacement?");
System.out.println("-0: en haut à gauche");
System.out.println("-1: en haut à droite");
System.out.println("-2: en bas à gauche");
System.out.println("-3: en bas à droite");
correct=false;
while(!correct)
{
Scanner sc=new Scanner(System.in);
dep=sc.nextInt();
if(dep>=0 && dep<=3)
{
correct=true;
}
}
//i2 et j2 sont les futurs coordonnées du pion. La variable boooléene mouvOk vérifie la validité de ce futur emplavement
i2=posi+mouv[dep][0];
j2=posj+mouv[dep][1];
moveOk=i2>=0 && i2<=7 && j2<=0 && j2<=7;
//cas où le déplacement est valide
if(moveOk)
{
damier[posi][posj]=false;
damier[i2][j2]=true;
//affichage du nouveau damier
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
{
if(damier[i][j])
{
System.out.println("O");
}
else
{
System.out.println("X");
}
}
System.out.println("***");
}
}
else
{
//cas où le déplacement n'est pas valide
System.out.println("mouvement impossible");
}
}
}


4 réponses

  1. Dans "new int [3][1]" tu déclare une longueur de 1 pour la 2e colonne et juste après "mouv[1][1]" t'essaie d'accéder à la 2e position.
    1. en écriavant comme ceci


      boolean[][] damier = new boolean [7][7];
      int[][]mouv=new int [3][2];

      //choix 0:pion en haut à droite
      mouv[0][0]=-1;
      mouv[0][1]=-1;

      //choix 1:pion en haut à gauche
      mouv[1][0]=-1;
      mouv[1][1]=1;

      //choix 2:pion en bas à gauche
      mouv[2][0]=1;
      mouv[2][1]=-1;

      //choix 3:pion en bas à droite
      mouv[3][0]=1;
      mouv[3][1]=1;

      j'ai erreur suivante:
      Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
      at Divers3.main(Divers3.java:26)
      1. j'ai corrigé

        //choix 0:pion en haut à droite
        mouv[0][0]=-1;
        mouv[0][1]=-1;

        //choix 1:pion en haut à gauche
        mouv[1][0]=-1;
        mouv[1][1]=1;

        //choix 2:pion en bas à gauche
        mouv[2][0]=1;
        mouv[2][1]=-1;

        //choix 3:pion en bas à droite
        //mouv[3][0]=1;
        //mouv[3][1]=1;

        après avoir éxécute ce prg, pour chaque mouvement
        il annonce
        "mouvement impossible"

        Entrez la ligne de votre pion:
        4
        Entrez la colonne de votre pion:
        4
        Quel déplacement?
        -0: en haut à gauche
        -1: en haut à droite
        -2: en bas à gauche
        -3: en bas à droite
        2
        mouvement impossible

        veuillez m'aidez svp
        1. j'ai corrigé mon prg, mais il faut que jusqu'au 0, 1, 2 mouvement
          il fait pas 3eme mouvement
          il me donne ce message:
          Quel déplacement?
          -0: en haut à gauche
          -1: en haut à droite
          -2: en bas à gauche
          -3: en bas à droite
          3
          Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
          at Divers3.main(Divers3.java:88)

          import java.util.Scanner;
          public class Divers3
          {
          public static void main(String[] args)
          {
          char reponse='O';
          do
          {
          int i, j, posi, posj, i2, j2,dep = 0;
          posi=0;
          posj=0;
          boolean correct,moveOk;
          boolean[][] damier = new boolean [7][7];
          int[][]mouv=new int [3][2];
          //int[][]mouv=new int [3][3];
          //choix 0:pion en haut à droite
          mouv[0][0]=-1;
          mouv[0][1]=-1;

          //choix 1:pion en haut à gauche
          mouv[1][0]=-1;
          mouv[1][1]=1;

          //choix 2:pion en bas à gauche
          mouv[2][0]=1;
          mouv[2][1]=-1;

          //choix 3:pion en bas à droite
          //mouv[3][0]=1;
          //mouv[3][1]=-1;
          //mouv[3][2]=1;

          //initialisation du damier; le pion n'est pour le moment nulle part
          for(i=0;i<damier.length;i++)
          {
          for(j=0;j<damier.length;j++)
          {
          damier[i][j]=false;
          }
          }
          //saisie de la coordonée en i (posi)avec contrôle de saisie
          correct=false;
          while(!correct)
          {
          System.out.println("Entrez la ligne de votre pion:");
          Scanner sc=new Scanner(System.in);
          posi=sc.nextInt();
          if(posi>=0 && posi<=7)
          {
          correct=true;
          }
          }
          //saisie de la coordonée en j (posj)avec contrôle de saisie
          correct=false;
          while(!correct)
          {
          System.out.println("Entrez la colonne de votre pion:");
          Scanner sc=new Scanner(System.in);
          posj=sc.nextInt();
          if(posj>=0 && posj<=7)
          {
          correct=true;
          }
          }
          //positionnement du pion sur le damier virtuel
          damier[posi][posj]=true;
          //saisie du déplacement, avec contrôle
          System.out.println("Quel déplacement?");
          System.out.println("-0: en haut à gauche");
          System.out.println("-1: en haut à droite");
          System.out.println("-2: en bas à gauche");
          System.out.println("-3: en bas à droite");
          correct=false;
          while(!correct)
          {
          Scanner sc=new Scanner(System.in);
          dep=sc.nextInt();
          //if(dep>=0 && dep<=3)
          //if(dep>=0 && dep<=2)
          if(dep>=0 && dep<=3)
          {
          correct=true;
          }
          }
          //i2 et j2 sont les futurs coordonnées du pion. La variable boooléene mouvOk vérifie la validité de ce futur emplavement
          //i2=posi+mouv[dep][0];
          //j2=posj+mouv[dep][1];
          i2=posi+mouv[dep][0];
          j2=posj+mouv[dep][1];
          moveOk=i2>=0 && i2<=7 && j2>=0 && j2<=7;
          //cas où le déplacement est valide
          if(moveOk)
          {
          damier[posi][posj]=false;
          damier[i2][j2]=true;
          //affichage du nouveau damier
          for(i=0;i<7;i++)
          {
          for(j=0;j<7;j++)
          {
          if(damier[i][j])
          {
          System.out.print("O");
          }
          else
          {
          System.out.print("X");
          }
          }
          System.out.println("***");
          }
          }
          else
          {
          //cas où le déplacement n'est pas valide
          System.out.println("mouvement impossible");
          }

          System.out.println("Vous voulez reessayer(O/N):");
          Scanner sc=new Scanner(System.in);
          reponse=sc.nextLine().charAt(0);
          }
          while(reponse=='O');
          System.out.println("Au revoir...");
          }
          }

          aidez moi svp