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

Java Discussion :

Problème de liste et de pointeur


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut Problème de liste et de pointeur
    Bonsoir, je souhaiterais avoir de l'aide concernant un programme qui doit ajouter des mots dans une liste de façon ordonné.

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    import iut.algo.Clavier;
    import java.util.LinkedList;
    import java.util.ListIterator;
    import java.io.*; 
     
    public class Liste //implements Serializable 
    {
    	// Attributs 
    	private LinkedList<String> liste ;
    	private String nom ;
     
     
    	// Constructeurs
    	public Liste ( String nom ) 
    	{	
    		this.nom = nom ;
    		this.liste = new LinkedList<String>() ;
    	}
     
    	// Accesseurs
    	public String getNom() {	return this.nom ; 	}
     
    	// Methode ajouter et supprimer
    	public boolean ajouter ( String mot ) 
    	{
    		if ( liste.size() == 0 )
    		{
    			liste.add( mot ) ;
    			return true ;
    		}
    		else 
    		{
    			ListIterator<String> it = liste.listIterator() ;
    			boolean bOK = false ;
     
    			while ( it.hasNext() && !bOK ) 
    			{
    				int x = it.next().compareTo( mot ) ;
    				if ( x >= 0 ) 
    				{
    					if ( it.previous().equals( mot ) ) 
    						return false ;
    					else
    						bOK = true ;
    				}
    			}
     
    			it.add( mot ) ;
    			return true ;
    		}
    	}
     
    	public boolean supprimer( String mot ) 
    	{
    		if ( liste.size() == 0 )
    			return false ;
     
    		ListIterator<String> it = liste.listIterator() ;
     
    		while ( it.hasNext() )
    		{
    			if ( it.next().equals( mot ) ) 
    			{
    				it.remove() ;
    				return true ;
    			}
    		}
     
    		return false ;
    	}
     
     
    	// Affichage
    	public String toString()
    	{
    		String s = "" ;
    		ListIterator<String> it = liste.listIterator() ;
    		// Affichage du nom de la colonne
    		s += "----------------------------\n" ;
    		s += "| " + String.format( "%-25s", nom ) + " |\n" ;
    		s += "----------------------------\n" ;
    		s += "----------------------------\n" ;
     
    		// Affichage de la liste
    		if ( liste.size != 0 )
    		{
    			while ( it.hasNext() )
    			{
    				s += "| " + String.format ( "%-25s", it.hasNext() ) + " |\n" ;
    			}
    		}
     
    		s += "----------------------------\n" ;
    		return s ;
    	}
     
     
    	// Main et methodes du main
    	public static void main ( String[] args ) 
    	{
    		Liste[] tabListe = new Liste[1000] ;
    		cpt = 0 ;
    		int choix, choix2, ind ;
    		String s ;
    		boolean tr = false ;
     
    		// Choix des options des listes ( creer, modifier ou quitter ) 
    		do 
    		{
    			afficherMenu() ;
    			choix = Clavier.lire_int() ;
    			System.out.println() ;
     
    			switch ( choix )
    			{
    				case 1 : 	System.out.print ( "Nom de la liste a creer : " ) ;
    							s = Clavier.lireString() ;
    							tabListe[cpt++] = new Liste ( s ) ;
    							break ;
    				case 2 :	System.out.print ( "Nom de la liste a modifier : " ) ; 
    							s = Clavier.lireString() ;
    							break ;
    				case 3 :	System.out.println ( "Noms des listes : " ) ; 
    							if ( tabListe.length != 0 )
    							{
    								for ( int i = 0 ; i < tabListe.length ; i++ ) 
    									System.out.println ( tabListe[i].getNom() ) ;
    							}
    							break ;
    			}
     
    			System.out.println() ;
     
     
    			// Modification de la liste nouvellement cree ( ajout, suppression, affichage, quitter ) 
    			if ( choix = 1 )
    			{
    				ind = cpt-1 ;
    				do 
    				{
    					afficherMenuListe() ;
    					choix2 = Clavier.lireString() ;
    					System.out.println() ;
     
    					switch ( choix2 ) 
    					{
    						case 1 : 	System.out.print ( "Mot a ajouter : " ) ;
    									s = Clavier.lireString() ;
    									tabListe[ind].ajouter( s ) ;
    									break ;
    						case 2 : 	System.out.print ( "Mot a supprimer : " ) ;
    									s = Clavier.lireString() ;
    									tabListe[ind].supprimer( s ) ;
    									break ;
    						case 3 :	System.out.println ( "\n" + tabListe[ind].toString() ) ;
    									break ;						
    						case 4 :	System.out.print ( tabListe[ind].getNom() ) ;
    									break ;
    					}
     
    					System.out.println() ;
     
    				} while ( choix2 != 0 ) ;
    			}
     
    			// Modification de la liste choisie si elle existe ( ajout, suppression, affichage, quitter ) 
    			if ( choix = 2 && ( tabListe.length != 0 ) )
    			{
    				for ( int i = 0 ; i < tabListe.length ; i++ ) 
    				{
    					if ( tabListe[i].getNom().equals( s ) )
    					{
    						ind = i ;
    						tr = true ;
    					}
    				}
    				if ( tr ) 
    				{
    					do 
    					{
    						afficherMenuListe() ;
    						choix2 = Clavier.lireString() ;
    						System.out.println() ;
     
    						switch ( choix2 ) 
    						{
    							case 1 : 	System.out.print ( "Mot a ajouter : " ) ;
    										s = Clavier.lireString() ;
    										tabListe[ind].ajouter( s ) ;
    										break ;
    							case 2 : 	System.out.print ( "Mot a supprimer : " ) ;
    										s = Clavier.lireString() ;
    										tabListe[ind].supprimer( s ) ;
    										break ;
    							case 3 :	System.out.println ( "\n" + tabListe[ind].toString() ) ;
    										break ;			
    							case 4 :	System.out.print ( tabListe[ind].getNom() ) ;
    										break ;
    						}
     
    						System.out.println() ;
     
    					} while ( choix2 != 0 ) ;
    				}
    			}
     
    			System.out.println () ;
     
    		} while ( choix != 0 ) ;
    	}
     
    	private static void afficherMenu() 
    	{
    		System.out.println ( "\n\n\n" );
    		System.out.println ( "*******************************" );
    		System.out.println ( "**           MENU            **" );
    		System.out.println ( "*******************************" );
     
    		System.out.println ();
     
    		System.out.println ( " 1. Creer   	  Liste      "      );
    		System.out.println ( " 2. Modifier    Liste      "      );
    		System.out.println ( " 3. Afficher    Nom des listes "  );
    		System.out.println ( "                        "      	);
    		System.out.println ( " 0. Quitter"						);
     
    		System.out.println ();
    		System.out.print   ( "      votre choix : "            );
    	}
     
    	private static void afficherMenuListe() 
    	{
    		System.out.println ( "\n\n\n" );
    		System.out.println ( "*******************************" );
    		System.out.println ( "**           MENU            **" );
    		System.out.println ( "*******************************" );
     
    		System.out.println ();
     
    		System.out.println ( " 1. Ajouter      Mot      "      	);
    		System.out.println ( " 2. Supprimer    Mot      "      	);
    		System.out.println ( " 3. Afficher     Liste 	"  		);
    		System.out.println ( " 4. Afficher     Nom de la liste 	"  		);
    		System.out.println ( "                        "      	);
    		System.out.println ( " 0. Quitter"						);
     
    		System.out.println ();
    		System.out.print   ( "      votre choix : "            );
    	}
    }
    La compilation marche mais à l'exécution, j'ai des NullPointerException quand il s'agit d'afficher.

    De plus j'ai un problème avec ma méthode ajouter, je ne sais pas comment réadapter une ListIterator avec une LinkedList.

    Merci d'avance pour l'aide en espérant avoir posté au bon endroit.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Déjà poste la stack trace de l'exception, sinon on va avoir du mal à localiser ton NullPointerException.

    Ensuite je ne comprends pas ce que tu entends par "réadapter une ListIterator avec une LinkedList"?

    Un iterator te sert juste à parcourir une liste.

  3. #3
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Pour ranger une list, il y a la methode Collections.sort() qui fait ca tres bien

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut
    Pour la méthode Collections.sort(...), merci je n'y avais pas pensé.

    Donc le problème de la liste est en partie réglé. J'avais oublié que lorsqu'on tentait d'ajouter un mot, il y a un blocage du programme.
    Pour les problèmes de pointeurs, il y en a deux. Voici les exécutions.

    Pour l'ajout d'un mot : http://www.casimages.com/img.php?i=1...1222295872.png

    Pour les pointeurs :
    http://www.casimages.com/img.php?i=1...3506147650.png
    http://www.casimages.com/img.php?i=1...3740445538.png

    Il y un décalage d'une ligne puisque j'ai rajouter le Collections.sort() pour trier la liste après l'ajout.

  5. #5
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Pour ton probleme, je dirais que le pointeur null vient de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( tabListe[i].getNom().equals( s ) )
    qui se situe dans une boucle qui parcourt tabListe en entier alors que celui-ci n'est pas rempli. Sinon, tu peux aussi utiliser un debugger, c'est plus rapide qu'un forum pour debugger...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut
    J'ai réussi à résoudre mes problèmes.
    Merci pour l'aide.

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

Discussions similaires

  1. Problème de liste déroulante et js...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/03/2006, 10h44
  2. [MySQL] Problème de listes déroulantes liées avec requêtes sql
    Par richton95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/12/2005, 16h04
  3. Problème avec liste déroulante
    Par Invité dans le forum IHM
    Réponses: 2
    Dernier message: 14/12/2005, 21h04
  4. Problème avec listes liées entre elles et bouton "précé
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2005, 15h10
  5. [LG]Listes chainées avec pointeur
    Par PaowZ dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2004, 19h49

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