tomi45
Messages postés13Date d'inscriptionlundi 4 janvier 2010StatutMembreDernière intervention 4 avril 2008
-
27 mars 2008 à 22:39
extraman1 -
4 avril 2008 à 21:41
bonjour , je suis actuellement en 1ere année de licence et j'ai un
projet sur lequel je suis bloqué par l'affichage suivant :Exception in
thread main java.lang.NullPointerException
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201339 27 mars 2008 à 23:02
Salut:
Il faut apprendre à débogguer le code.
Fais la trace de ton programme en mettant des instructions d'affichage (System.out.println, ...) dans plusieurs endroits de ton code pour savoir où l'exception est déclenchée.
L'exception NullPointerException est une exception qui se lève en temps d'exécution d'ailleurs il n'est pas nécessaire de la traiter.
Ombitious_Developper a raison. Dans la méthode "estprioritaire", le paramètre "deuxième" est à null, c'est ça qui doit poser problème. Le message d'erreur est pourtant assez clair.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 28 mars 2008 à 07:14
Salut,
lol ombitious : apprendre à debugguer un programme, c'est bien, le faire comme il faut, c'est mieux
Au lieu de mettre des traces un peu partout, ce qui est pratique, certes, mais constitue une perte de temps, je lui conseillerai plutôt d'utiliser un IDE digne de ce nom (du style eclipse ou netbeans), et de mettre des points d'arrêts dans son code, d'exécuter ce dernier pas à pas aux endroits où ca coince et regarder la valeurs des variables, ca c'est du vrai débogguage
______________________________________
DarK Sidious
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 28 mars 2008 à 10:06
at debut.evaluation(debut.java:59) est la ligne intéressante.
Ensuite, et en regardant le code source autour, il n'y a qu'une seule conclusion possible:
Quand tu exécute la ligne 59, op a la valeur null:
if (!(estprioritaire(op,i))) {
tomi45
Messages postés13Date d'inscriptionlundi 4 janvier 2010StatutMembreDernière intervention 4 avril 2008 28 mars 2008 à 14:13
Bonjour.Merci beaucoup a tous pour vos réponses très rapides .Je n'ai pas tout compris à ce que vous m'avez dit de faire mais j'ai compris que la variable op était initialiser a null ce qui renvoie une erreur.j'ai donc changé cette variable et un nouvel affichage me donne :
Mailllon@130c19b
Maillon@1f6a7b9
Maillon@7d772e
voici le programme:
import java.util.*;
import java.util.StringTokenizer;
public class debut {
public static void main (String args []) {
String ok=new String("oui");
do {
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 28 mars 2008 à 16:17
Que viennent faire les deux classes Mailllon et Maillon le dedans? Que font ces deux classes? Où sont'elles définies? Pourquoi tu n'envois pas le code source intégralement? Quelle sont les données que tu entre à la Console? ... ... ...
tomi45
Messages postés13Date d'inscriptionlundi 4 janvier 2010StatutMembreDernière intervention 4 avril 2008 28 mars 2008 à 16:38
Merci cela fonctionne même si ce n'est pas l'affichage que je voudrai.ça doit provenir d'une erreur dans mon programme que je vais essayer de trouver.Mais que veut dire la commande que vous avez ajouté dans la classe maillon parce que je ne la connait pas.
tomi45
Messages postés13Date d'inscriptionlundi 4 janvier 2010StatutMembreDernière intervention 4 avril 2008 28 mars 2008 à 18:02
J'ai donc recommencé le programme pour qu'il corresponde a mon projet mais l'erreur java.lang.NullException revient alors que op n'est pas initialisé a nul.
Je vous donne mon programme :
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 29 mars 2008 à 21:42
Pour la construction d'un "Parser", on devrait tenir compte de ce qui suit :
* L'abstraction est très importante. Si on n'insère pas directement "+" et co dans le code mais les traite comme objets, on peut simplifier le tout.
* Compréhension de la récursion. Car avec une récursion on peut calculer très facilement des parenthèses comme "(5+4)*3" .
Le "Parser" de mon message précédent travaille comme suit :
* Enferme la formule avec deux parenthèses. (Ces parenthèses ne doivent pas exister vraiment. Nous faisons simplement comme si elles étaient là. L'importance de la formule ne change pas, si on convertit un "x" en "(x)", l'algorithme devient toutefois plus simple).
* Recherche à partir de gauche le premier signe de parenthèse "(" ou")".
- Si tu trouve une parenthèse ouvrante, appel toi-même. Dit-toi aussi qu'une partie de la formule a été examinée déjà, et que tu ne dois plus chercher à partir du début, mais à partir de la parenthèse ouvrante trouvée.
- Si tu trouve une parenthèse fermante: découpe la partie de la formule depuis la dernière parenthèse ouvrante jusqu'à la parenthèse fermante trouvée. Aucune autre parenthèse ne se trouve dans cette partie, cette partie peut maintenant être convertie en valeur:
+ Parcours la formule partielle de gauche vers la droite. Cherche l'opération qui a la priorité la plus élevée, si plusieurs opérations devraient avoir la même priorité, alors celle choisis celle que tu as trouvé d'abord.
+ Calcule l'opération. Supprime les arguments et l'opération elle-même de la formule, et écrit le résultat dans la formule. Exemple : on remplace "1+2" par "3".
+ Si encore d'autres opérations devraient se trouver dans cette partie de la formule, alors commence avec un autre parcours de la boucle.
+ Autrement supprime la parenthèse ouvrante et la parenthèse fermante avant et derrière cette formule partielle . Exemple : "(123)" devient "123".
* Quand la formule a été réduite pas à pas, ne se compose maintenant plus que du résultat.