Erreur java

Fermé
bathna - Modifié le 7 juin 2018 à 14:16
 bathna - 7 juin 2018 à 17:03
Bonjour, qlq peut m'aider s'il vous plait
..
voici une methode que je veux l'executer.
public static  void explore(int position, int depth) {
    int[][] matAdja= getMatriceAdjacente();
    int[][] matAdja2 = new  int[listeNoeuds.size()+1][listeNoeuds.size()+1] ;
    for(int k = 0 ; k <listeNoeuds.size(); k++) {
      for(int l = 0 ; l <listeNoeuds.size(); l++) {
       matAdja2[k][l]=matAdja [k+1][l+1];
        
        
      }
       System.out.print ("\n");}
    
    
    
    
    for(int k = 0 ; k <listeNoeuds.size(); k++) {
      for(int l = 0 ; l <listeNoeuds.size(); l++) {
         System.out.print (matAdja2 [k][l]+ " ");
        
        
     }
       System.out.print ("\n");}
    
    
    path[depth]=position;
     // on est sur le sommet d'arrivé -> fini
     if (position==4) {
      // affiche la solution
      for(int i=0;i<=depth;i++) 
      System.out.print(path[i]+" "); 
       //  ArrayList pathlist = new ArrayList<>(path[i]);
     // pathlist.add(path[i]);
      System.out.print("\n");
      
      
      return;
     
     }
     
     // sinon...
     
     taboo[position]=true; // on pose un caillou
     
     // on explore les chemins restants
     for(int i=0;i<listeNoeuds.size()+1;i++) {
   if (matAdja2[position][i]==0 || taboo[i]) 
    continue;
      explore(i,depth+1);
     }
     
     taboo[position]=false; // on retire le caillou
    }

mais il me donne l'erreur :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at modeleGraphe.Graphe.explore(Graphe.java:114).

voici la ligne
if (matAdja2[position][i]==0 || taboo[i]) 

comment je peux le resoudre
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
7 juin 2018 à 14:24
Bonjour,

De manière générale,
ArrayIndexOutOfBoundsException: 1
, signifie que tu fais un tab[1] sur un tableau où l'indice 1 n'existe pas.

Vu ton code c'est difficile de savoir sur quel élément ça plante, car sur ta ligne il y a 3 accès tableaux, donc potentiellement les 3 peuvent être en cause.

Je commencerai par vérifier la taille de taboo dont tu ne nous as pas donné le code, mais dont tu as peut-être oublié de faire la taille "+1" de la même manière que matAdja2.

Remarque : si ça plante avec i=1 alors que tu fais un +1 sur i, ça veut dire ta listeNoeuds est vide...
0
merci pour la réponse
.
mais ma liste des nœuds n'est pas vide, et j'ai déjà fixé la taille de taboo et path a nbre des noeuds +1 et plus que ça lorsque j'ai testé la methode ailleurs dans une classe independante ça marche tres bien donc je ne sais pas comment faire vraiment????
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > bathna
7 juin 2018 à 14:59
Remplace ta ligne en erreur
if (matAdja2[position][i]==0 || taboo[i]) 
par le code suivant, plus détaillé, tu sauras d'une part quelle partie du code plante et d'autre part avec quelles valeurs.

System.out.println("matAdja2.length=" + matAdja2.length);
System.out.println("position=" + position);
int[] tmp = matAdja2[position]; // erreur ?

System.out.println("tmp.length=" + tmp.length);
System.out.println("i=" + i);
int n = tmp[i]; // erreur ?
System.out.println("n=" + n);

System.out.println("taboo.length=" + taboo.length);
System.out.println("i=" + i);
boolean b = taboo[i]; // erreur ?
System.out.println("b=" + b);

if (n==0 || b) // matAdja2[position][i]==0 || taboo[i]
0
merci bcp pour l'essai de m'aider.
voici ce que me donner comme erreur:

matAdja2.length=6
position=0
tmp.length=6
i=0
n=0
taboo.length=1
i=0
b=true
matAdja2.length=6
position=0
tmp.length=6
i=1
n=1
taboo.length=1
i=1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at modeleGraphe.Graphe.explore(Graphe.java:125)
at testMonGraphe.TestMonGraphe.main(TestMonGraphe.java:36)
le pb resiste encore
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > bathna
7 juin 2018 à 15:16
Bien sûr que le problème persiste, mais cela confirme que le problème est sur la taille de taboo...
0
public static boolean[] taboo = new boolean[listeNoeuds.size()];
0