Java.lang.ArrayIndexOutOfBoundsException

Fermé
nournawar Messages postés 1 Date d'inscription dimanche 29 juillet 2018 Statut Membre Dernière intervention 3 août 2018 - Modifié le 3 août 2018 à 08:47
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 3 août 2018 à 08:25
Bonsoir à tout, comment gérer ce message d'erreur.Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1at atovic.Normalize.main(Normalize.java:37)
package atovic;

public class Normalize {
 static int m,n,p,k,j,i;
 static double x[][]=new double[m][n];
 static double h[]=new double[k];
 public static double[] eigenvector(int [][]x) {
  double sum=0;
  int k=2;
  for(p=1; p<=k; p++){
   {
    for(i=1; i<=m; i++){
     for(j=1; j<=n; j++){
     if(j==k){
     double px=Math.pow(x[i][j], 2);
     sum =sum+px;
    h[p]=Math.sqrt(sum);
     }
     else{
      j++;
     }
   }
   }
  }
  }
  return h;
 
 }
 
        
 public static void main(String[]args){
  int [][]x=new int[m][n];
  int k=2;
  double h[]=eigenvector(x);
  for(p=1; p<=k; p++)
  {
  System.out.println("The normalzed matrix is of class p is" +h[p]);
  }

}
}

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
3 août 2018 à 08:25
Bonjour,

m et n ne sont pas initialisés, par défaut ils valent 0, donc tous tes tableaux sont de taille [0] et [0][0] pour la matrice, et le programme plante quand tu fais h[p] avec p=1 car la case 1 n'existe pas.

Remarque : en Java les tableaux commencent à l'indice 0, pas à l'indice 1, il faut donc écrire
for (int i=0; i<n; i++)
car si tu fais
for (int i=1; i<=n; i++)
d'une part tu "oublieras" la case 0, d'autre part tu auras une erreur à la case n.
1