Appel d'une variable

Fermé
i just wanna know - 24 nov. 2011 à 22:09
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 25 nov. 2011 à 07:09
Salut tout le monde,

je dois déclarer une matrice dans une classe et la manipuler dans une autre,càd que je vais l'instancier de la maniere suivante:
la classe Labyrinthe contient la matrice mat
et la manipulation se fait au niveau de la classe Manip
pour l'appel je me positionne dans Manip et j'écris :
labyrinthe laby = new Labyrinthe();
puis pour manipuler mat je fais laby.mat;

c'est ce que j'ai appris à faire dans java,cependant lorsque j'exécute j'ai le message "stack overflow" qui s'affiche est ce que c'est du à la taille de la matrice ou quoi???

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 24/11/2011 à 22:24
Stack Overflow ce serait plutôt dû à un trop grand nombre d'appels récursifs.

Remarque : utiliser laby.mat ce n'est pas très propre comme code, faire ne serait-ce qu'une petite méthode mat() { return mat; } serait un peu mieux. Tu aurais alors à manipuler laby.mat(), ce qui ne change pas grand chose. ;-)
La confiance n'exclut pas le contrôle
0
i just wanna know
24 nov. 2011 à 22:39
encore une fois merci bcp KX :-) ,
effectivement y a plusieurs appels récursifs dans mon pgm...en fait je vois pas comment je peux le faire autrement.Je vais essayer de faire la méthode mat () que vous avez proposé et je vous rendrai la réponse. :-)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 24/11/2011 à 22:46
La méthode mat() c'est juste pour éviter de faire ce genre de choses : laby.mat = uneNouvelleValeur
C'est gênant qu'une classe externe puisse se permettre ce genre de choses...

Mais ça ne résoudra pas ton problème, qui est plutôt lié à une récursion infinie comme dans cette exemple qui te permettra peut être de comprendre la StackOverflowError ;-)

public class Test 
{ 
	static int n = 0; 
	public static void main(String...args) 
	{ 
		n++; 
  		
		try 
		{ 
			main(); 
		}  
		catch (StackOverflowError e) 
		{ 
			System.err.println(e+" : n="+n); 
		} 
}
0
i just wanna know
24 nov. 2011 à 23:01
non non je vous comprend très bien et je sais que ce que je suis en train de faire n'est pas vraiment optimal :((( mais le malheur c'est que j'arrive à faire mieux.En fait je suis sensée créer un agent qui doit trouver la sortiedans un labyrinthe et comme l"agent" et l"environnement" doivent être séparés l'un de l'autre j'ai créé l'environnement qui est la matrice et je la manipule dans la classe agent avec une fonction "avancer" qui a pour paramètres (le i et le j ) où on a placé notre agent et puisque le travail est le même jusqu'à ce que l'agent trouvera la sortie j'ai décidé de procéder "récursivement"
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
24 nov. 2011 à 23:07
Le problème c'est que tu as trop d'appels récursifs, comme montre mon petit code, on ne peut guère en faire plus que 10 000. Or je pense que tu tournes en round dans ton labyrinthe en repassant plusieurs fois par le même endroit... Il va falloir que tu demandes à Ariane si elle peut te prêter son fil ;-)
0
i just wanna know
24 nov. 2011 à 23:17
qu'est ce que vous entendez par le mm endroit??le pgm doit faire en sorte que l'agent ne repasse pas par le mm chemin, l'appel récursif se fait par les voisins de la case actuelle où se trouve l'agent,car il est possible que (par exemple si il avance vers i-1,j) que ca soit un mur donc il doit tester jusqu'à trouver une case libre...
0