ArrayIndexOutOfBoundsException
eztec
-
eztec -
eztec -
Bonjour,
J'ai donc l'erreur spécifiée dans mon titre, le problème est que je n'arrive pas à la résoudre, voici mon code:
Le problème viendrait du while de la méthode convolution, si j'enlève le if à l'interieur de celle-ci, j'ai un -1 au lieu de 3 (en indice d'erreur)
Et si j'enlève le else je n'ai plus d'erreur... Mais comme dit plus haut, je n'arrive pas à corriger
J'ai donc l'erreur spécifiée dans mon titre, le problème est que je n'arrive pas à la résoudre, voici mon code:
class wait
{
static void find (int[][] image, double[][] mask)
{
//Définir tailles max de image:
int LimgX = image.length;
int LimgY = image[0].length;
//Initialiser la position pour image
int imgX = 0;
int imgY = 0;
//Initialiser la position pour sous image
int smgX = 0;
int smgY = 0;
double [][]imagec = new double[LimgY][LimgX]; // imagec = copie de image
while (imgY<LimgY)
{
imagec[imgY][imgX]=convolution(image,mask,imgX,imgY);
if (imgX<LimgX){imgX++;}
else if (imgY<LimgY){imgX=0;imgY++;}
}
afficherMatriceDouble(imagec);
}
public static double convolution (int[][] image, double[][] mask, int posimgX, int posimgY)
{
int LimgX = image.length;
int LimgY = image[0].length;
int Lmask = mask.length;
int milieu = (int)Lmask/2;
int imgcX = posimgX-milieu;
int imgcY = posimgY-milieu;
int posMaskX = 0;
int posMaskY = 0;
double somme = 0;
while (posMaskY<Lmask)
{
if (imgcX > 0 && imgcY > 0 && posimgX+milieu < LimgX && posimgY + milieu< LimgY)
{
somme = somme + image[imgcY][imgcX]*mask[posMaskY][posMaskX];
}
if (posMaskX<Lmask) {posMaskX++;imgcX++;}//dépasse
else if (posMaskY<Lmask){posMaskY++;imgcX=imgcX-Lmask-1;posMaskX=0;imgcY++;}
}
return somme;
}
static void afficherUnTableau(int[] tab)
{
int af=0;
while (af!=tab.length)
{
System.out.print(tab[af]+" ");
af++;
}
}
static void afficherMatrice (int[][] matrice)
{
int ar=0;
while (ar!=matrice.length)
{
afficherUnTableau(matrice[ar]);
System.out.println();
ar++;
}
}
static void afficherUnTableauDouble(double[] tab)
{
int af=0;
while (af!=tab.length)
{
System.out.print(tab[af]+" ");
af++;
}
}
static void afficherMatriceDouble (double[][] matrice)
{
int ar=0;
while (ar!=matrice.length)
{
afficherUnTableauDouble(matrice[ar]);
System.out.println();
ar++;
}
}
public static void main(String[]args)
{
System.out.println("Voici le fichier testé");
int[][] image = new int[3][4];
image[0][0] = 6;
image[1][0] = 7;
image[2][0] = 5;
image[0][1] = 3;
image[1][1] = 1;
image[2][1] = 2;
image[0][2] = 1;
image[1][2] = 1;
image[2][2] = 1;
image[0][3] = 1;
image[1][3] = 2;
image[2][3] = 3;
afficherMatrice (image);
System.out.println("Voici le masque");
double[][] masque = new double[3][3];
masque[0][0] = 3;
masque[1][0] = 4;
masque[2][0] = 3;
masque[0][1] = 2;
masque[1][1] = 1;
masque[2][1] = 2;
masque[0][2] = 2;
masque[1][2] = 2;
masque[2][2] = 2;
afficherMatriceDouble(masque);
find(image, masque);
}
}
Le problème viendrait du while de la méthode convolution, si j'enlève le if à l'interieur de celle-ci, j'ai un -1 au lieu de 3 (en indice d'erreur)
Et si j'enlève le else je n'ai plus d'erreur... Mais comme dit plus haut, je n'arrive pas à corriger
2 réponses
Au moment où ça plante tu as mask = [[3.0, 2.0, 2.0], [4.0, 1.0, 2.0], [3.0, 2.0, 2.0]]
Et tu essayes de faire mask[2][3].
Il faut que tu rajoutes une condition, par exemple if (maskX<mask[maskY].length)
Et tu essayes de faire mask[2][3].
Il faut que tu rajoutes une condition, par exemple if (maskX<mask[maskY].length)
Merci de ta réponse, cependant je ne vois pas et ne comprends pas où et pourquoi placer cette condition.
En fait mon masque est toujours de taille impaire et carré, donc la longue de mask[y] est la même que mask (ici 3)
j'ai modifié la condition d'incrémentation de mon comme tel: if (posMaskX<LmaskX-1) mais ça bug toujours
En fait mon masque est toujours de taille impaire et carré, donc la longue de mask[y] est la même que mask (ici 3)
j'ai modifié la condition d'incrémentation de mon comme tel: if (posMaskX<LmaskX-1) mais ça bug toujours