Java Taquin, cellule adjacente matrice

Résolu/Fermé
Aktayen Messages postés 189 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 17 décembre 2015 - 10 nov. 2010 à 21:32
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 10 nov. 2010 à 23:02
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 11/11/2010 à 13:28
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 nov. 2010 à 22:25
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 dimanche 31 mai 2009 Statut Membre Dernière intervention 17 décembre 2015 19
10 nov. 2010 à 22:45
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 dimanche 31 mai 2009 Statut Membre Dernière intervention 17 décembre 2015 19
10 nov. 2010 à 22:54
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 nov. 2010 à 23:02
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