Problem java

Fermé
starweb2585 Messages postés 17 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 22 mai 2013 - 4 mars 2009 à 17:54
starweb2585 Messages postés 17 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 22 mai 2013 - 13 mars 2009 à 15:12
Bonjour,
je suis débutant en programmation et j'ai fait un programme au java netbeans mais j'ai eu des messages erreurs que j'arrive pas a trouvé leurs significations...
mon programme c'est de calculé et affiché la meilleur distant de départ d'une ville et revenir a cette ville en passant par tout les autres ville une seul fois (problème de voyageurs commerce)l'algorithme de mon programme marche bien parce que j'ai fait test avec 4 ville et 5 ville mais quand je met le nombre de ville 10 ou plus les messages d' erreurs s'affichent:

Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.SingleByteEncoder.encodeArrayLoop(SingleByteEncoder.java:91)
at sun.nio.cs.SingleByteEncoder.encodeLoop(SingleByteEncoder.java:130)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:544)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:252)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
at java.io.PrintStream.write(PrintStream.java:476)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)

quelqu'un a des explication c'est vraiment urgent
merci d'avance
A voir également:

4 réponses

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
4 mars 2009 à 21:24
Bonsoir,
Exception in thread "main" java.lang.StackOverflowError
Ne cherches pas plus loin, tu as un Stack overflow (débordement de pile). Ca peut signifier deux choses :
- que ton algorithme est gourmand en ressources et donc qu'il faut que tu augmentes l'espace réservé à ta pile (en java elle est surtout utilisée pour stocker les adresses de retour des méthodes vu qu'on utilise beaucoup d'objets et peu de types primitifs). Le fait que tu aies un problème pour n=5 et pas n=4 est sans doute logique : tu dois avoir un algorithme assez glouton (si par exemple il construit tous les chemins possibles, alors il est de complexité exponentielle et donc il est normal qu'il explose au bout d'un moment).
- que ton algorithme est gourmand, mais qu'il est TROP gourmand justement : tu devrais pouvoir trouver une solution pour l'optimiser en évitant de faire autant d'appels récursifs par exemple, quitte à stocker des résultats pour les réutiliser plus tard dans l'algorithme (voir l'exemple classique de la suite de Fibonacci en C qui est toute bête mais fait vite tout exploser), ou à utiliser d'autres astuces.

En général c'est la seconde option qu'il faut considérer (les ordinateurs d'aujourd'hui ont assez de mémoire pour ne pas planter sur n=5), donc regarde bien ton code et vois où tu peux l'optimiser.

Cordialement,
0
starweb2585 Messages postés 17 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 22 mai 2013
4 mars 2009 à 23:19
merci beaucoup Marco

sauf que j'ai le problème quand il y a le nombre de ville plus de 10 pas n=5,
oui c'est vrais j'utilise beaucoup la récursivité mais j'ai fait d'optimisation en évitant par exemple de calculé une distance 2 fois(aller et retour) et d'arrêté le calcul quand on arrive a une distance plus grande que celle qu'a été enregistré dans le chemin optimal donc serai inutile de continu le calcul dans ce chemin,
pour ça j'ai mémorisé les résultats dans une liste pour remplir les chemins déja utilisé ou ceux qu'ils sont grandes de chemin optimal déja trouvé.
mais bon plus y a des villes plus y a de récursives
si je peux argumenté la taille de la pille ça marche?
si oui commet on fait?

merci encore :)
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
5 mars 2009 à 00:19
Bonsoir,
Pour les algorithmes, ce que tu as fait semble pas mal déjà. Peut-être peux-tu encore optimiser tout ça en t'inspirant des algorithmes "classiques" de recherche du chemin le plus court (Dijkstra, Prim, Bellman-Ford...).

Pour la taille de la pile, apparemment c'est configurable lorsque tu exécutes ton programme. Jette un oeil ici

Cordialement,
0
starweb2585 Messages postés 17 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 22 mai 2013
13 mars 2009 à 15:12
bonjours
en faite j'ai changé la récursivité par une boucle et elle marche maintenant parfaitement j'ai meme testé avec 15 villes :d
au tout cas merci pour votre aide
0