Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept

Nakeele Messages postés 4 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 11 octobre 2015 - 11 oct. 2015 à 20:40
KX Messages postés 16602 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 3 octobre 2022 - 11 oct. 2015 à 21:55
salut,

Je suis en train de faire un exercice mais j'ai un message d'erreur et je tourne en rond pour voir comment je fixe ca mais sans resultats.

J'aimerais savoir la raison pour laquelle je recois ce message SVP.

Merci !



public class Sudoku {

private int[][] tableaufinal;
private int placements = 0; // Placements representent les emplacements possibles des chiffres de 1 a 9
private int complexite = 0; // Complexite : 1 (debutant), 2 (intermediaire) et 3 (avance)
private String nom; // Nom du joueur
private int[][] grille;
private int n; //nombre d'elements dans le SUDOKU (un carre n*n, donc 3*3, 9*9, etc.)


public static void main(String[] args) {

//i = 3;
//j = 3;

Sudoku unsudoku = new Sudoku("Gandalf Tombe", 3, 3, 1);


System.out.println(unsudoku.getNom()+ " " + unsudoku.getTableau(3,3) + unsudoku.getGrille(3,3));


}




// constructeur de SUDOKU
public Sudoku(String leNom, int n, int lesPlacements, int laComplexite) {
// a completer
// ...

this.n = n; // affectation du parametre n a la variable de classe n
grille = new int[n][n]; // declaration du tableau grille pour qu'il fasse n lignes de n colonnes
tableaufinal = new int[n][n]; //declaration du tableau grille pour qu'il fasse n lignes de n colonnes pour tableauFinal
nom = leNom;
placements = lesPlacements;
complexite = laComplexite;

initialisation();
}


public void initialisation () {
// initialise tous les champs de la grille a 0
// ...
for(int i=0; i<grille.length; i++) {
for(int j=0; j<grille[i].length; j++) {
grille[i][j]=0;
}
}

}
// a completer

public int getTableau(int i, int j)
{
return tableaufinal [i][j];
}
public int getGrille(int i, int j)
{
return grille [i][j];
}
public String getNom() {
return nom;
}


}

A voir également:

1 réponse

KX Messages postés 16602 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 3 octobre 2022 124
11 oct. 2015 à 21:55
Bonjour,

En Java les indices d'un tableau de taille N peuvent aller de 0 à N-1.
Ici tu as des tableaux de taille 3. Tu ne peux donc pas faire getTableau(3,3) car la case maximale est (2,2)...

Remarque : le message d'erreur te donne des informations précieuses pour déboguer.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
	at pipe.Sudoku.getTableau(Sudoku.java:59)
	at pipe.Sudoku.main(Sudoku.java:21)

D'une part le nom de l'exeption te permet d'aller voir la documentation associée : ArrayIndexOutOfBoundsException
Dans ton cas tu as même une information complémentaire : le 3, qui correspond à la valeur de l'indice qui est incorrect.

Ensuite, les lignes du dessous indiquent le code qui plante.
L'erreur est ligne 59 de la méthode getTableau :
return tableaufinal [i][j];
Cette erreur intervient quand elle est appelée ligne 21 dans le main :
System.out.println(unsudoku.getNom()+ " " + unsudoku.getTableau(3,3)...
0