Java.lang.ArrayIndexOutOfBoundsException: 1

domxaline -  
 domxaline -
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. Nhhi Messages postés 384 Statut Membre 300
     
    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.
    0
  2. domxaline
     
    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)
    0
  3. domxaline
     
    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
    0
  4. domxaline
     
    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
    0