Java Taquin, cellule adjacente matrice

Résolu
Aktayen Messages postés 189 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,


J'ai recherché sur le net et je n'ai rien trouvé, je ne dois pas avoir les bon mots clés, j'espère que vous pourrez m'aider.

Je suis entrain de programmer le jeu du Taquin (en Java) et je tombe sur un problème récurent que je ne sais pas résoudre (à part en bidouillant).

Imaginons une matrice d'entier, je sélectionne une cellule avec ma souris, j'aimerais tester tout les cellules voisines pour savoir sil' une d'elles est égale à 0.

Je le test comme ça :
Soit (i,j) la case sélectionnée avec la souris.
si( matrice[i+1][j]==0 ou si matrice[i][j+1]==0 ou si matrice[i-1][j])==0 ou si matrice [i][j-1]==0)
alors ..etc.
Le problème est que si je sélectionne une cellule qui est sur le bord de la matrice j'ai le fameux "java.lang.ArrayIndexOutOfBoundsException" car forcement avec mes conditions je sors de la matrice.

Est ce que quelqu'un aurait un moyen simple et efficace pour tester tout les voisins d'une cellule?

Merci d'avance,
A voir également:

4 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il faudra rajouter des conditions pour chaque appel à un calcul sur la matrice susceptible de déborder.

Certaines conditions sont implicites mais si on devait toutes les expliciter on aurait, pour chaque appel :

if (a>=0 && a<n && b>=0 && b<n && matrice[a][b]==0)
a pouvant être i, i-1, i+1
b pouvant être j, j-1, j+1
La confiance n'exclut pas le contrôle
1
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Dans la mesure où tu sais ce que tes conditionnes ne suffisent pas, rajoutes en !
Grace à l'évaluation paresseuse en Java, tu peux cumuler tes conditions :

(i+1<n && matrice[i+1][j]==0) || ...

Si tu as i+1 qui dépasses la dimension de ta matrice, l'instruction i+1<n renverra false, en conséquence le programme n'a pas besoin de calculer matrice[i+1][j] puisque de tout de façon le résultat est connu et sera false.
Donc le calcul n'est pas fait et l'exception n'est pas levée !
0
Aktayen Messages postés 189 Date d'inscription   Statut Membre Dernière intervention   20
 
Merci déjà d'être venu à mon aide.
Avec cette solution, comment je fais pour vérifier les voisins si ma cellule choisi est dans un coin? ça marchera quand même?
0
Aktayen Messages postés 189 Date d'inscription   Statut Membre Dernière intervention   20
 
ouai ok, je vais m'amuser ^^. Je faisais plus ou moins comme ça avant mais j'avais espéré qu'il y est quelques choses de moins lourd..

En tout cas merci de ton aide.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Comme je l'ai dit la plupart sont implicites.
En fait tout ce qui est k (i ou j) ne nécessite pas de test particulier si tu es dans ton intervalle 1..n
Seuls les tests k-1>=0 et k+1<n sont véritablement utiles si tu utilises [k-1] ou [k+1]
Les deux si tu testes un coin...
0