IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Question Remplissage Tableau de Structure de données


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Question Remplissage Tableau de Structure de données
    Bonjour,
    J'ai suis entrain de développer une petite application Java.
    Le question d'aujourd'hui est sur le correcte méthode de l'initalisation d'un tableau.
    En fait, je dispose d'une méthode qui permet d'inserer des valeurs à l'intérieur d'un tableau de structure des "Rubrique " sachant qu'une rubrique à la structure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Rubrique {
     
    	 public String name;
    	 public String Gpe;
    	 public String Valeur;
    	 public String Valeur;
    quand je remplis ce tableau de structure et je l'affiche à l'interieur de la meme boucle de remplissage les valeurs inséres sont affiché mérveilleusement.
    Mais quand je veux afficher ce meme tableau dans une autre fonction Affiche_Structure il me renvoie une excpetion Null Pointer.
    Ci-dessous le code de cette classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
     
    public class BandeLoader {
     
     
    	private String id;
    	//à changer l'initialisation apres
        private String Tab_SsGpe[] = new String[100000];
        private Rubrique    Tab_SsRub[]=new Rubrique[10000];
    	public String ToReadFile(String  Path)
    	    {
    	    	String chaine="";
    			//String Output_File="fichier2";
    			//lecture du fichier texte	
    			try{
    				InputStream ips=new FileInputStream(Path); 
    				InputStreamReader ipsr=new InputStreamReader(ips);
    				BufferedReader br=new BufferedReader(ipsr);
    				String ligne;
    				int i=0;
    				int index_Sep;
    				int index_fin;
    				while ((ligne=br.readLine())!=null){
     
     
    					//System.out.println(ligne);
    					chaine+=ligne+"\n";
    					String Groupe_Name=ligne.substring(0,10);
    					Tab_SsGpe[i]=Groupe_Name;
     
    					index_Sep=ligne.indexOf(",");
    			        index_fin=ligne.indexOf("'", index_Sep+3);
     
    			        Tab_SsRub[i] = new Rubrique();
    					Tab_SsRub[i].setName(ligne.substring(0, index_Sep));
    					Tab_SsRub[i].Gpe=Groupe_Name;
    					Tab_SsRub[i].Valeur=ligne.substring(index_Sep+2, index_fin);
     
    					System.out.println("Tab_SsRub["+i+"].name: "+Tab_SsRub[i].name);
    					System.out.println("Tab_SsRub["+i+"].Gpe: "+Tab_SsRub[i].Gpe);
    					System.out.println("Tab_SsRub["+i+"].Valeur: "+Tab_SsRub[i].Valeur);
    			        System.out.println("index_Sep: "+index_Sep);
    			        System.out.println("index_fin: "+index_fin);
    					System.out.println("Tab_SsGpe["+i+"]:"+Tab_SsGpe[i]);
    					i++;
    				}
    				br.close(); 
    			}		
    			catch (Exception e){
    				System.out.println(e.toString());
    			}
     
     
    			return chaine;
     
    	    }
    	  public void Affiche_Structure(){
    		  for(int t=0;t<Tab_SsGpe.length;t++)
    		  {	  System.out.println(Tab_SsRub[t].name);
    		  System.out.println("Tab_SsRub["+t+"].Gpe"+Tab_SsRub[t].Gpe);
    		  System.out.println("Tab_SsRub["+t+"].Valeur: "+Tab_SsRub[t].Valeur);}
    	  }
     
     
     
    	  public static void main(String[] args)
    		{
    			BandeLoader Test = new BandeLoader();
    			String Chaine =Test.ToReadFile("Bande AED.txt");
    			//Test.Affiche_Structure();
     
     
    		}
     
    }
    Résultat à de tableau à l’intérieur de la boucle d'affichage
    Nom : 1.jpg
Affichages : 148
Taille : 87,0 Ko

    résultat à l'extérieur quand j'enléve le commentaire ligne 74
    Nom : 2_2.jpg
Affichages : 136
Taille : 118,0 Ko

    et voila le fichier txt de laquelle j'extrait Bande AED.txt

    SVP SVP veillez m'aider. Je suis sure que c un problème simple mais que j'arrive pas le comprendre.
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    En premier lieu,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Rubrique {
     
    	 public String name;
    	 public String Gpe;
    	 public String Valeur;
    	 public String Valeur;
    1. Pas de majuscule pour les attributs d'une classe. Cela fait partie des conventions de nommage lié à Java
    2. On ne peut pas déclarer l'attributs "Valeur" deux fois.

    Pour ce qui est de ton problème de null pointer. Il faut comprendre comment est crée et remplis ton tableau.
    Pour ce qui est de sa création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Rubrique    Tab_SsRub[]=new Rubrique[10000];
    Tu as donc un tableau à 10 000 cases ayant toutes pour valeur null.
    Pour le remplissage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    int i=0;
    int index_Sep;
    int index_fin;
    while ((ligne=br.readLine())!=null){
    	chaine+=ligne+"\n";
    	String Groupe_Name=ligne.substring(0,10);
    	Tab_SsGpe[i]=Groupe_Name;
     
    	index_Sep=ligne.indexOf(",");
    	index_fin=ligne.indexOf("'", index_Sep+3);
     
    	Tab_SsRub[i] = new Rubrique();
    	Tab_SsRub[i].setName(ligne.substring(0, index_Sep));
    	Tab_SsRub[i].Gpe=Groupe_Name;
    	Tab_SsRub[i].Valeur=ligne.substring(index_Sep+2, index_fin);
    	i++;
    }
    On a donc un remplissage partiel ou total du tableau. A noter, que le cas où il y a plus de ligne lu que de case dans le tableau n'est pas pris en compte.
    On a donc les n premières cases n'étant plus à null, mais pointant vers un objet. Il reste donc 10 000 -n cases ayant pour valeur null.

    Pour ce qui est de l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void Affiche_Structure(){
    		  for(int t=0;t<Tab_SsGpe.length;t++)
    		  {	  System.out.println(Tab_SsRub[t].name);
    		  System.out.println("Tab_SsRub["+t+"].Gpe"+Tab_SsRub[t].Gpe);
    		  System.out.println("Tab_SsRub["+t+"].Valeur: "+Tab_SsRub[t].Valeur);}
    	  }
    1. Tu prend Tab_SsGpe.length et non Tab_SsRub.length. Ce qui fait que tu as potentiellement pas la bonne longueur d’itération. (ici tu n'as de la chance, ces deux tableaux ne font pas la même longueur).
    2. Tu appel directement Tab_SsRub[t].name. Or comme dit précédemment, il est possible que ta valeur Tab_SsRub[t] soit null.

    Il faudrait donc faire une vérification avant de tenter l'accès à cette objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void Affiche_Structure(){
    	for(int t=0;t<Tab_SsGpe.length;t++) {
    		if(Tab_SsRub[t] == null){
    			System.out.println("Tab_SsRub["+t+"] null");
    		} else {
    			System.out.println(Tab_SsRub[t].name);
    			System.out.println("Tab_SsRub["+t+"].Gpe"+Tab_SsRub[t].Gpe);
    			System.out.println("Tab_SsRub["+t+"].Valeur: "+Tab_SsRub[t].Valeur);
    		}
    	}
    }
    Cependant, il serai très largement préférable d'utilisé une liste et non un tableau dans ce cas. Je t'encourage à aller voir la Javadoc pour ArrayList et List. Il y a un lien vers la Javadoc dans ma signature.

    Cordialement,
    Patrick Kolodziejczyk.

    Source :
    Convention de nommage: http://www.oracle.com/technetwork/ja...35099.html#367

    Note :
    Un tableau de 10 000 cases est relativement groument en mémoire. Mais, un tableau de 100 000, c'est juste énorme. Fait attention genre de déclaration.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    D'abord Merci pour votre réponse rapide. C gentil
    Puis oui vous avez complètement raison à propos vos remarques.
    Il faut vérifier est ce que la valeur du tableau est null ou pas avant de l'afficher !!
    Voila l'affichage correcte
    Nom : 4.jpg
Affichages : 129
Taille : 67,3 Ko
    Encore une grande Merci!
    Cordialement
    Imene Belkhir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Implementation d'un tableau de structure de données
    Par macdack dans le forum Débuter
    Réponses: 3
    Dernier message: 04/07/2014, 17h33
  2. Réponses: 3
    Dernier message: 12/11/2009, 14h26
  3. Réponses: 0
    Dernier message: 27/04/2009, 17h28
  4. Structurer des données dans un tableau
    Par julie75 dans le forum Débuter
    Réponses: 21
    Dernier message: 18/12/2007, 23h20
  5. Réponses: 3
    Dernier message: 28/07/2006, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo