Partage
  • Partager sur Facebook
  • Partager sur Twitter

liste chainer

    23 mai 2011 à 1:34:36

    bonsoir à tous !
    je bloque lors de mon exécution il m'affiche ces 3 messages :

    Exception in thread "main" java.lang.NullPointerException
    at ListFichiers.ajouter(ListFichiers.java:26)
    at Fichier.main(Fichier.java:43)

    voilà mon code :

    pour la première Class


    import java.util.Scanner;
    
    
    
    public class ListFichiers {
    	Fichier info;
    	Element tete,p,q;
    
    
    public void ajouter(){
    		 Scanner e=new Scanner(System.in);
    		 p = tete;
    		 if (p==null )
    		   {
    			 	System.out.println("p=null,veuillez introduire les val nom taille date j m a");
    			 	p.info.nom = e.next();
    		        p.info.taille = e.nextInt();
    		        p.info.datemodif.jour = e.nextInt();
    		        p.info.datemodif.mois = e.nextInt();
    		        p.info.datemodif.anne = e.nextInt();
    		        tete = p;
    		        
    		    }
    		 else {for(p=tete;p!=null;p=p.svt)
    		               {System.out.println("boucle pour aller au nul");
    			 			int x=1;} 
    		        System.out.println("la boucle est fini");
    		 		p.info.nom = e.next();
    		 
    		        p.info.taille = e.nextInt();
    		        p.info.datemodif.jour = e.nextInt();
    		        p.info.datemodif.mois = e.nextInt();
    		        p.info.datemodif.anne = e.nextInt();
    		        tete = p;
    		 }
    		 
    		 
    	 }
    	
    
    
    }
    




    pour ma deuxième Classe


    public class Element {
    
    	Fichier info;
    	Element svt;
    	
    	}
    




    et voila pour la classe main


    import java.util.*;
    public class Fichier {
    	//declarations des attributs 
    	  String nom;
    	  int taille;
    	  Date datemodif;
    	  
    	public Fichier(String nom, int taille){
    		this.nom = nom;
    		this.taille=taille;
    		this.datemodif= new Date(0,0,0);
    	}
    	
    
    public static void main(String[] args) {
    	
    		Scanner e=new Scanner(System.in);
    		Fichier ed = new Fichier(null,0);
    				
    		
    		ListFichiers lst = new ListFichiers();
    		lst.ajouter();
    		
    	}
    
    }
    




    je crois que je n'ai pas fait allouer un espace mais bon je ne sais pas est ce qu'il faut un malloc sa n'existe pas en java lors de la compilation il me génère ces messages :

    Exception in thread "main" java.lang.NullPointerException
    at ListFichiers.ajouter(ListFichiers.java:26)
    at Fichier.main(Fichier.java:43)

    en sachant que l'appelle ce fait de la méthode ajouter() du niveau de l'instruction
    System.out.println("p=null,veuillez introduire les val nom taille date j m a");
    et il me donne les messages d'erreur

    donc voilà j'attends vos repenses et merci d'avance ,

    Cordialement ===>Elen<===
    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2011 à 10:51:41

      Salut.

      Alors plusieurs choses :
      1) La classe date est déprécié dans sa grande majorité, je te conseille de regarder du côté de calendar.
      2) Tu fais p.info.datemodif.jour sauf que jour n'est pas un attribut de la classe date.
      3) pour avoir accès aux attributs d'un objet il faut que celui-ci soit instancier. Par exemple ici p.info... , si tu veux accèder a info il faut que p soit instancier or p vaut null lorsque tu crées ta liste et que tu appelles ajouter() => tu te prends NullPointerException.
      4) Sert toi des modificateur de portée, des accèsseurs et des getteurs, parce que c'est vraiment "crade" de coder comme ça.
      5) Avec Java pas besoin de te soucier plus que ça de l'espace mémoire. (Il faut pas faire nawak non plus mais le Garbage collector gère pas mal la situation sauf cas exceptionnels).
      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2011 à 0:21:17

        bonsoir
        j'ai déjà créer une classe Date pour définir les jours mois et anné mais j'ai pas compris par instancier mon p
        en ce qui conserne les setter et les getteurs peut-tu me donner un exemple pour comprendre car j'ai jamais vue sa ,
        et merci d'avance
        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2011 à 8:26:31

          Salut,

          Citation

          j'ai pas compris par instancier mon p



          En java on distingue 2 choses la déclaration et l'instanciation (création d'un objet). Déclarer une variable correspond à :
          P monP;
          

          Ici ta variable monP est déclarée mais elle n'est pas instanciée. Pour y remédier tu dois utiliser l'opérateur new :
          P monP = new P();
          

          Ici tu viens de créer un objet de type P.


          Citation

          les setter et les getteurs peut-tu me donner un exemple pour comprendre car j'ai jamais vue sa



          Les getters/setters permettent d'accéder/modifier des variables privées d'une classe :

          public class Element {
          
          	     private Fichier info;
          	     
                       public Fichier getInfo(){
                             return this.info;
                       }
          
                      public void setInfo(Fichier info){
                             this.info = info;
                       }
          	}
          


          Citation

          j'ai déjà créer une classe Date


          Quand on développe avec un langage de programmation, il faut utiliser au maximum les outils qu'ils proposent. En java, tu peux manipuler facilement les dates à l'aide de la classe Calendar. Tu devrais faire un tour sur la doc officielle pour voir comment l'utiliser.
          • Partager sur Facebook
          • Partager sur Twitter
            27 mai 2011 à 12:28:13

            Citation

            Quand on développe avec un langage de programmation, il faut utiliser au maximum les outils qu'ils proposent.


            Comme le dis _TomTom_ à part si tu veux ou dois implémenter une liste chaînée toute seule tu peux utiliser les classes pré-définies par Java (voir la liste chaînée dans la javadoc).

            Ensuite, il faut séparer les différentes parties de ton code. La liste chaînée ne doit servir qu'à ajouter, obtenir ou supprimer un élément. Ainsi, tu ne dois pas faire d'input ou d'output dans la méthode ajouter() de ta classe ListFichiers.
            Ta code devrait plus ressembler à ça :
            public class ListFichiers {
                // Attributs
            
                public void ajouter(Element e) {
                    // Ajout de l'élément e
                }
            }
            

            et
            public static void main(String[] args) { 
                //  Output/Input, récupération des informations 
                //  fichier et création de l'élément e 
            
                ListFichiers lst = new ListFichiers();
                lst.ajouter(e);
            }
            


            Et puis c'est une liste chaînée.

            • Partager sur Facebook
            • Partager sur Twitter

            liste chainer

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown