Se connecter

Informatique

Programmation

Sujet : java aide
1
dali2000
Niveau 2
12 décembre 2017 à 15:45:20

Bonjour a tous et toutes ce morceau de code genere erreur de compilation java.lang.NullPointerException
si qlq peux m'aider ^^

Bunyan
Niveau 14
12 décembre 2017 à 17:21:42

Merci de nous montrer le morceau de code en question -_-

Sinon, une NullPointerException (NPE) est l'exception la plus classique en Java.
Celle-ci implique que tu invoques une méthodes sur une variable null ou que tu passes une variable null à une méthode ne le gérant pas.

dali2000
Niveau 2
12 décembre 2017 à 20:33:48

XD vous avez raisonje m'excuse jetais un peu presse j'ai pas fait attention voila le morceau de code -_-

public void MofifierPersonne(Personne p)
{
boolean found = false;
for( int i=0;i<nbrpersonne;i++)
{
if(tab[i].getNom()==p.getNom())
tab[i].setPrenom(p.getPrenom());
tab[i].setNaissance(p.getNaissance());
tab[i].setTel(p.getTel());
found = true;
break;}

if (found) AjouterPersonne(Personne P) ;
}
et voici la methode Ajouterpersonne
public boolean AjouterPersonne(Personne P)
{
if(nbrpersonne<tab.length)
{
tab[nbrpersonne]=P;
nbrpersonne++;
return true;
}
else return false;
}

Yllid
Niveau 16
12 décembre 2017 à 22:18:34

if (found) AjouterPersonne(Personne P) ;

Bizarre cette ligne. C'est quoi ce P ?

_S0uL
Niveau 9
12 décembre 2017 à 22:20:50

Tu développe avec quoi ? Eclipse ? C'est bizarre que ça compile déjà. Cette ligne :

 if (found) AjouterPersonne(Personne P) ;

devrai plutôt être :

 if (found) AjouterPersonne(p); 

Ensuite, tu es sur que le paramètre que tu passe à la fonction ModifierPersonne est initialisé ?

EDIT : De plus je pense en regardant le code qu'il manque des accolades après le premier if autour du code qui le suit.

dali2000
Niveau 2
13 décembre 2017 à 14:29:37

oui eclipse Voici tous le code il genere Exception in thread "main" java.lang.NullPointerException
at agendapersonne.Agenda.AjouterPersonne(Agenda.java:27)
at agendapersonne.TestAgenda.main(TestAgenda.java:14)
Mercipour votre aide :)
public class Agenda {
protected String name;
protected static int nbrpersonne=0;
Personne []tab ;

public Agenda(String name)
{
this.name=name;
nbrpersonne++;

}
public void Afficher() {

for (int i=0;i<tab.length;i++)
{
if(tab[i]!=null)
System.out.println(tab[i]);
}

}
public boolean AjouterPersonne(Personne P)
{
if(nbrpersonne<tab.length)
{
tab[nbrpersonne]=P;
nbrpersonne++;
return true;
}
else return false;
}
public void RechercherPersonne(String nom)
{

for( int i=0;i<nbrpersonne;i++)
{
if(tab[i].getNom().toLowerCase()==nom.toLowerCase())
{System.out.println(tab[i]);
break;
}

if(i==nbrpersonne) {
System.out.println("This person is unavailable "
+ ",check Other Calendars . ");}
}
}

public void MofifierPersonne(Personne p)
{
boolean found = false;
for( int i=0;i<nbrpersonne;i++)
{
if(tab[i].getNom()==p.getNom())
{
tab[i].setPrenom(p.getPrenom());
tab[i].setNaissance(p.getNaissance());
tab[i].setTel(p.getTel());
found = true;
break;
}

if (found) AjouterPersonne(p) ;
}
} }
et ca le test
package agendapersonne;
import java.util.Scanner;

public class TestAgenda {
public static void main(String[]args)
{
Personne p =new Personne(" gaultier","jean paul","24 april 1952",02356720);
Personne p1 =new Personne(" Cotillard","Marion","30 September 1975",70566734);
Personne p2=new Personne ("leo","davinchi","15 april 1452",6547893);
p.toString();
p1.toString();
Personne[ ] tab= new Personne [100];
Agenda A = new Agenda("family calendar");
A.AjouterPersonne(p);
A.AjouterPersonne(p1);
A.AjouterPersonne(p2);

A.Afficher();
System.out.println("--------Add person to calendar--------");

Scanner sc=new Scanner(System.in);
System.out.println("please enter your last name :");
String prenom=sc.nextLine();
System.out.println("please enter your name:");
String nom=sc.nextLine();
System.out.println("please enter your mobile phone number :");
int tel=sc.nextInt();
sc.close();
A.AjouterPersonne(new Personne(prenom,nom,tel));

// try
// {
A.MofifierPersonne(new Personne("Mariem","Aidi","25 janvier 1989",26936699));
//}
//catch (NullPointerException e)
//{
//System.out.println("Ce Nom n'existe pas dans l'agenda !");
}

}

_S0uL
Niveau 9
13 décembre 2017 à 15:36:37

S'il te plais pour la prochaine fois met ton code dans des balises code ou bien utilise un service comme pastebin, hastebin ou github gists parce que c'est illisible et peu de monde va s'amuser à copier ça dans son éditeur pour l'indenter. Je l'ai fais...

Ton NPE vien de ta variable tab la classe Agenda. Quand tu fais tab.length dans la fonction AjouterPersonne (c'est pour ça que ton compilateur de donne l'erreur à cet endroit) Java ne peut pas le savoir puisque tu ne l'as jamais initilisé. Il faut que tu l'initialise dans le constructeur par exemple.

dali2000
Niveau 2
13 décembre 2017 à 20:37:51

Tu as raison je m'excuse pour le code ^^ ,j'ai fixe linitialisation de la variable tab ,mais lerreur persiste
Exception in thread "main" java.lang.NullPointerException
at agendapersonne.Agenda.MofifierPersonne(Agenda.java:54)
at agendapersonne.TestAgenda.main(TestAgenda.java:33)
mais cette fois ci il genere lexception apres avoir introduire les information d'une personne
merci SOul pour vos reponses :)

_S0uL
Niveau 9
13 décembre 2017 à 21:36:45

Cette exception vient à priori de la méthode ModifierPersonne. Elle fait un parcour de ton tableau et à un moment donné elle tombe sur une case où il n'y a pas de personne dedans. Indice pour trouver cette case : dans ta fonction Afficher fait un System.out.println(i);, tu trouvera facilement d'où vient le problème. D'ailleur il n'est pas nécessaire de parcourir tout le tableau dans cette fonction mais ça c'est un autre problème.

Bunyan
Niveau 14
14 décembre 2017 à 08:23:05

<code>agendapersonne.Agenda.MofifierPersonne(Agenda.java:54)</Code

L'erreur provident du package agendapersonne, de la classe Agenda, située dans le fichier Agenda.java, et elle survient à la ligne 54.
Normalement, en sachant lire la stacktrace, tu devrais pouvoir la corriger sans trop de souci :)

dali2000
Niveau 2
14 décembre 2017 à 10:34:28

j'ai un System.out.println(i) dans ma methode...
comment stp Bunyan :question: public void Afficher() { for (int i=0;i<nbrpersonne;i++) { if(tab[i]!=null) System.out.println(tab[i]); }
excusez moi je suis encore debutante

_S0uL
Niveau 9
14 décembre 2017 à 11:49:43

Non tu as un System.out.println(tab[i]);. Mais si tu fais afficher les i tu verra tout de suite la "case" de ton tableau qui n'est pas instanciée (celle qui ne sera pas écrite dans la sortie) et tu pourra corriger facilement le problème. Ce if :

if(tab[i]!=null)

Fait que tes personnes s'affichent normalement dans cette fonction puisque tu ignore les "cases" non instanciées. Dans tes fonction ModifierPersonne et RechercherPersonne tu ne fait pas cette vérification (et c'est très bien elle ne devrai même pas être dans Afficher. Mais du coup comme tu as fais une toute petite erreur ça te fais planté ton programme parce que tu as 1 et 1 seul case de tab entre 0 et nbpersonne qui est vide. Ton erreur est vraiment très simple je suis sur que tu peux la trouver en cherchant un peu.

dali2000
Niveau 2
14 décembre 2017 à 13:09:28

" tres simple" mais je n'arrive pas a le resoudre sincerement :-(

_S0uL
Niveau 9
14 décembre 2017 à 16:24:33
public Agenda(String name)
{
	this.name=name;
	nbrpersonne++;
}

Bon ça c'est ton constructeur pour la classe Agenda (tu as peut-être ajouté quelque chose pour créer le tableau ou pas mais peu importe). Il y a combien de personnes dans ton tableau quand tu crées un objet de cette classe ?

Bunyan
Niveau 14
14 décembre 2017 à 22:32:37

Respire, arrête-toi un peu :)
Remonte depuis l'erreur, et interprète ce qu'elle te dit. C'est très important que tu y arrives par toi-même car tu auras à le faire en non stop.

Par de ce postulat :
"Mon erreur m'indique un problème à la ligne 54. Une valeur est null et j'invoque une méthode dessus, ce qui fait planter.
Je regarde cette ligne. Qu'est-ce qui peut être null ici ?
Est-ce que c'est normal que ce le soit ? Comment ma variable est-elle null ?
Comment résoudre le problème ? Faut-il que je mettes en place une vérification ? Ou ma variable ne peut pas être null ici, donc c'est problème d'initialisation ?"
Etc, etc :)

dali2000
Niveau 2
15 décembre 2017 à 01:40:29

hhh je viens a pensee autrement mnt

1
Sujet : java aide
   Retour haut de page
Consulter la version web de cette page