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

avec Java Discussion :

Problème NullPointerException


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Problème NullPointerException
    Bonjour, je suis débutante en Java et je dois créer une bataille navale pour mon école !

    J'ai actuellement 7 classes (Grille de Jeu, Joueur, Navires, Liste coordonnées, Nœud liste coordonnées, Liste Navires, Nœud Liste Navires).
    Je fais, à a fin de chaque classe, un main de test de méthode. Et pour le main de Liste Navires j'ai une Erreur :
    Voici mon main : Nom : main Liste Nav.png
Affichages : 265
Taille : 25,2 Ko

    et voici l'erreur que cela me renvoi :
    Exception in thread "main" java.lang.NullPointerException
    at BatNav.Joueur.RemplirListeBateau(Joueur.java:40)
    at BatNav.Joueur.<init>(Joueur.java:26)
    at BatNav.ListeNav.main(ListeNav.java:149)

    J'ai donc été voir la ligne 40 de joueur qui est dans mon programme de remplissage de la liste de navire :
    Nom : RemplirListe.png
Affichages : 216
Taille : 27,2 Ko

    et la je ne vois pas où est l'erreur.. J'ai essayé de modifier la manière d'écrire le nouveaux navires en mettant "Navires Torpilleurs ;" puis "Torpilleur =...; " cela n'a rien changé.. Du coup je me suis dis que cela venait peut être de mon nœud vide ("ListeCo.AjoutCoordFinVide()") dans lequel je place un tableau[2][2] rempli de 0 .. J'ai donc supprimé mon initialisation dans la méthode mais cela ne change rien.

    Je ne sais donc pas dutout d'où vient mon erreur...

    Si vous pouviez m'aider ce serai vraiment super !
    Et n'hésitez pas à me demander des informations ou des morceaux de code supplémentaire, je n'ai aucune idée de e dont vous avez besoin !

    Laure

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    A vue de nez, on dirait que ta liste "listeCo" (d'ailleurs, changes tes variables pour que la première lettre soit une minuscule, les majuscules en début sont réservées au classes), est null, mais comme on n'a pas tout le code, c'est pas facile de savoir si oui ou non ça vient de là.

    Tu peux nous mettre le code de ta classe Joueur? (parce que je crois savoir ce qui ne va pas)
    Je ne suis pas mort, j'ai du travail !

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Merci d'avoir répondu aussi vite !
    EN effet ListeCo est null :

    Nom : joueur2.png
Affichages : 213
Taille : 15,1 Ko


    Mais du coup, si je ne dois pas la mettre null dans le constructeur, je ne l'initialise pas ?

    Laure

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Tu dois l'initialiser avec son constructeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.listeCo = new ListeCoord();
    Poste ton code dans une balise [code] en cliquant sur le bouton # sur l'éditeur.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Donc, grâce à vos commentaires j'ai résolu ce problème et d'autres, mais j'ai de nouveau un problème de null pointer exception qui me fait littéralement péter un plomb .. lorsque je positionne mon navire, je fais en sorte de vérifier qu'il n'est pas sur un autre navire. Pour cela je récupère les coordonnées d'un navire en récupérant le navire dans la liste de navires et c'est la que ca ne va pas :
    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
    package BatNav;
     
    //Classe réalisée par Laure
     
    /*Méthode de la classe : 
     * 	- constructeur 
     * 	- getters and setters 
     * 	- méthode qui test si la liste est vide : vide()
     * 	- méthode qui ajoute un objet à la fin de la liste : AjoutNavFin(NodeNav N)
     * 	- méthode qui supprime un noeud de la liste : SuprNav(Navires N)
     * 	- méthode qui donne le nombre d'éléments de la liste : NbElement()
     * 	- méthode qui renvoi la valeur du ième élément de la liste : DonneElement()
     * 	- main de test de méthode
     */
     
    //Creation de la classe liste chainée qui recevra les différents types de Navires de chaque joueur 
    public class ListeNav {
     
    		private NodeNav premier; 
     
    		//constructeur
    		public ListeNav(){
    			this.premier=null;
    		}
     
     
    		//getters and setters
    		public NodeNav getPremier() {
    			return premier;
    		}
     
    		public void setPremier(NodeNav premier) {
    			this.premier = premier;
    		}
     
    		//méthode qui test si la liste est vide (on l'utilisera lorsqu'on testera si le joueur à gagner ou non)
    		//J'ai repris la métode du TD
    		public boolean vide(){
    			return premier == null; 
    		}
     
    		//Méthode qui ajoute un objet navire à la fin de la liste 
    		//J'ai repris la méthode du TD 
    		public void AjoutNavFin(Navires N) {
    			NodeNav NN= new NodeNav(N);
     
    			// cas particulier List vide
    			if (premier == null){
    				premier = NN;
    			}	
    			else {
     
    				//On créé Ncourant : noeud courant (noeud sur lequel nous menons l'étude à un moemnt donné)
    				NodeNav Ncourant = premier;
     
    				// avancer tant que suivant non null
    				while (Ncourant.getSuivant() != null) {
    					Ncourant = Ncourant.getSuivant();
    				}
     
    				// ici suivant est null
    				// on peut donc inserer le noeud N
     
    				Ncourant.setSuivant(NN);
    			}
    		}
     
    		//Méthode qui supprime un noeud de la liste
    		//Dans cette méthode, on cherche le noeud qui précède le noeud à supprimer
    		public void SuprNav(Navires N){
     
    			//cas de la liste vide 
    			if(vide()){
    				return;
    			}
     
    			else {
     
    				//le premier élément n'a pas d'élément qui le précède
    				//Son deuxième élèment est null donc on met le premier égal au deuxième 
    				//note : on pourrait mettre directement null, mais je garde ici la méthode utilisée dans le cas ou le premier élément est différent de la valeur voulue 
    				if (premier.getNavire()==N){
    					premier=premier.getSuivant();
    				}
    				else {
    					NodeNav Ncourant = premier; //On créé un noeud de "parcours" fictif, qu'on place sur le premier noeud (comme à la méthode précédente)
    					NodeNav SuivNcourant = premier.getSuivant(); //On référence également le noeud suivant le noeud de parcours
     
    					//On cherche à positionner SuivNcourant sur le noeud à supprimer 
    					while (SuivNcourant != null && SuivNcourant.getNavire() != N){
    						//note : attention à l'ordre ! 
    						Ncourant = SuivNcourant; 
    						SuivNcourant = SuivNcourant.getSuivant(); 
    					}
     
    					/* à la sortie de la boucle
    					 * soit il n'y avait pas de navire N et le "noeud suivant le noeud courant" est null
    					 * soit on est sur le noeud suivant le noeud courant contient la même chose que le noeud N
    					 */
     
    						if(SuivNcourant != null){
    							Ncourant.setSuivant(SuivNcourant.getSuivant());
    						}
    				}
    			}
    		}
     
    		//Méthode qui donne le nombre d'élément de la liste 
     
    		public int NbElement(){
    		//On traite le cas ou la liste est vide
    			if(vide()){
    				return 0;
    			}
     
    		    int i=1; //Variable nous servant à l'incrémentation
    			NodeNav Ncourant = premier;
     
    			while (Ncourant != null){
    				Ncourant = Ncourant.getSuivant();
    				i++;
    			}
    			return i; 
    		}
     
    		//Méthode qui me donne l'élément "i" de la liste
     
    		public Navires DonneElement(int i){
    			//System.out.println(i);
    		//On traite le cas ou la liste est vide
    			if(vide()){
    			System.out.println("La liste est vide");
    			}
     
    			int j = 0;
    			NodeNav Ncourant = new NodeNav(getPremier().getNavire());
    			//System.out.println(j);
    			while (j!=i){
    					//System.out.println("rentré dans le while");
    				Ncourant=Ncourant.getSuivant();
    				j++;
    				//System.out.println(j);
    				}
    		    return Ncourant.getNavire();	
    		}
    A la ligne 140 il m'annonce un Null Pointer Exception... :
    Exception in thread "main" java.lang.NullPointerException
    at BatNav.ListeNav.DonneElement(ListeNav.java:144)
    at BatNav.Navires.positionnement(Navires.java:156)
    at BatNav.Joueur.RemplirListeBateau(Joueur.java:43)
    at BatNav.Joueur.<init>(Joueur.java:25)
    at BatNav.ListeNav.main(ListeNav.java:154)

    Je ne comprend pas pourquoi...
    Je joins également le code de positionnement relatif à Navires.Java : 156 (ligne 89 dans le code que je joins.. Donc a priori c'est le DonneElement(i) qui plante)
    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
     
    	//Méthode qui positionne les navires intelligemment
    	public int[][] positionnement() {
     
    		int TabEnregistrement[][] = new int[2][2];
     
    		if(this.HO==false){
     
    			int absAv=0;
    			int ordAv=0;
    			int absAr=0;
    			int ordAr=0;
    			int test = 1; // Sert à éliminer le cas ou les navires ont plusieurs cases en commun
    			int abs=0;
    			int ord=0;
    			int abs2=0;
    			int ord2=0;
    			int alpha=0;
     
    			// On place les cooronnées arrières du Navire + on vérifie que les coordonnées sont bien dans la grille
    			while(test==1){
    				System.out.println("Veuillez saisir l'abcisse de l'arrière de votre "+ this.nomNavire +" ("+ this.taille +" cases) (entre 0 et 9)");
    				absAr = sc.nextInt();
    				while (absAr< 0 || absAr>9){
    					System.out.println("Mauvaise saisie veuillez saisir l'abcisse de l'arrière de votre "+ this.nomNavire +" ("+ this.taille +" cases) (entre 0 et 9)");
    					absAr = sc.nextInt();
    				}
    				System.out.println("Veuillez saisir l'ordonnée de l'arrière de votre "+ this.nomNavire +" ("+ this.taille +" cases) (entre 0 et 9)");
    				ordAr = sc.nextInt();
    				while (ordAr< 0 || ordAr>9){
    					System.out.println("Mauvaise saisie veuillez saisir l'ordonnée de l'arrière de votre "+ this.nomNavire +" ("+ this.taille +" cases) (entre 0 et 9)");
    					ordAr = sc.nextInt();
    				}
     
    				// On propose les positions possibles pour l'avant du bateau en prenant en compte sa taille 
    				if (absAr+this.taille-1>9){
    					System.out.println("Veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr - this.taille+1) +" ou "+absAr+".");
    					absAv = sc.nextInt();
    					while (absAv!= (absAr - this.taille+1) && absAv!= absAr){
    						System.out.println("Erreur veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : "+ (absAr - this.taille+1) +"ou"+absAr+".");
    						absAv = sc.nextInt();
    					}
    				}
    				else if(absAr-this.taille+1<0){
    					System.out.println("Veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr + this.taille-1) +" ou "+absAr+".");
    					absAv = sc.nextInt();
    					while (absAv!= (absAr + this.taille -1) && absAv!= absAr){
    						System.out.println("Erreur veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr + this.taille-1) + " ou "+absAr+".");
    						absAv = sc.nextInt();
    					}
    				}
    				else{
    					System.out.println("Veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr + this.taille-1) + " ou "+ (absAr - this.taille+1) +" ou "+absAr+".");
    					absAv = sc.nextInt();
    					while (absAv != (absAr + this.taille-1) && absAv!= (absAr - this.taille+1) && absAv!= absAr){
    						System.out.println("Erreur veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr + this.taille-1) + " ou " + (absAr - this.taille+1) +" ou "+absAr+".");
    						absAv = sc.nextInt();
    					}
    				}
    				if (absAr==absAv){
    					if (ordAr+this.taille-1>9){
    						ordAv=ordAr - this.taille+1;
    						System.out.println("L'ordonnée de l'avant de votre bateau est "+ordAv+".");
    					}
    					else if (ordAr-this.taille+1<0){
    						ordAv=ordAr + this.taille-1;
    						System.out.println("L'ordonnée de l'avant de votre bateau est "+ordAv+".");
    					}
    					else{
    						System.out.println("Veuillez saisir l'ordonnée de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : "+ (ordAr - this.taille+1) +" ou "+(ordAr + this.taille-1)+".");
    						ordAv = sc.nextInt();
    						while (ordAv!= ordAr - this.taille+1 && ordAv!= ordAr + this.taille-1 ){
    							System.out.println("Erreur veuillez saisir l'ordonnée de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : "+ (ordAr - this.taille+1) +" ou "+(ordAr + this.taille-1)+".");
    							ordAv = sc.nextInt();
    						}
    					}
    				}
    				else{
    					ordAv=ordAr;
    					System.out.println("L'ordonnée de l'avant de votre bateau est "+ordAv+".");
    				}
     
     
    				// On test si le navire a des coordonnées en commun avec d'autres Navires existants
     
    				//Tout d'abord on verifie les navires verticaux en remontant/descendant les cases du bateau une par une
            		if(!(this.J.getListeBat().vide())){
        				for(int i=0; i<this.J.getListeBat().NbElement(); i++){
         					if (this.J.getListeBat().DonneElement(i).getTabCoord()[0][0]==this.J.getListeBat().DonneElement(i).getTabCoord()[1][0]){
     							abs=this.J.getListeBat().DonneElement(i).getTabCoord()[0][0];
    							for(int k=0;k<this.J.getListeBat().DonneElement(i).getTaille();k++){
    								if(this.J.getListeBat().DonneElement(i).getTabCoord()[0][1]<this.J.getListeBat().DonneElement(i).getTabCoord()[1][1]){
    									ord=this.J.getListeBat().DonneElement(i).getTabCoord()[0][1]+k;
    								}
    								else{
    									ord=this.J.getListeBat().DonneElement(i).getTabCoord()[0][1]-k;
    								}
    								if(absAv<absAr){
    									abs2=absAv+k;
    								}
    								else if (absAv>absAr){
    									abs2=absAv-k;		
    								}
    								//Attention le cas d'égalité était oublié ! 
    								else if (absAv==absAr){
    									abs2=absAv;
    								}
    								if(ordAv<ordAr){
    									ord2=ordAv+k;
    								}
    								else if (ordAv>ordAr){
    									ord2=ordAv-k;	
    								}
    								else if (ordAv==ordAr){
    									ord2=ordAv;
    								}
    								if (abs==abs2 && ord==ord2){
    									alpha=1;
    								}
    							}
    						}
     
         					//Puis les navires horizontaux 
    						if (this.J.getListeBat().DonneElement(i).getTabCoord()[0][1]==this.J.getListeBat().DonneElement(i).getTabCoord()[1][1]){
    							ord=this.J.getListeBat().DonneElement(i).getTabCoord()[0][1];
    							for(int k=0;k<this.J.getListeBat().DonneElement(i).getTaille();k++){
    								if(this.J.getListeBat().DonneElement(i).getTabCoord()[0][0]<this.J.getListeBat().DonneElement(i).getTabCoord()[1][0]){
    									abs=this.J.getListeBat().DonneElement(i).getTabCoord()[0][0]+k;
    								}
    								else{
    									abs=this.J.getListeBat().DonneElement(i).getTabCoord()[0][0]-k;
    								}
    								if(absAv<absAr){
    									abs2=absAv+k;
    								}
    								else if (absAv>absAr){
    									abs2=absAv-k;		
    								}
    								//Attention le cas d'égalité était oublié ! 
    								else if (absAv==absAr){
    									abs2=absAv;
    								}
    								if(ordAv<ordAr){
    									ord2=ordAv+k;
    								}
    								else if (ordAv>ordAr){
    									ord2=ordAv-k;	
    								}
    								else if (ordAv==ordAr){
    									ord2=ordAv;
    								}	
    									if (abs==abs2 && ord==ord2){
    										alpha=1;
    								    }
    							}
    					   }
    				  }
    				  if (alpha==1){
    					  System.out.println("Votre "+this.nomNavire+" a une ou plusieur case en commun avec un navire déjà existant.");
    					  test=1;
    				  }
    					else {
    						test=0;
    					}
    				}
    				  else {
    					  test=0;
    				  }
    			}
     
    				  TabEnregistrement[0][0] = absAv;
    				  TabEnregistrement[0][1] = ordAv;
    				  TabEnregistrement[1][0] = absAr;
    				  TabEnregistrement[1][1] = ordAr;
    					return TabEnregistrement;
    				}
    			else{
    					TabEnregistrement=TabCoord;        		
    		}
    		return TabCoord;
    	}
    Si je résume ce qu'il se passe :
    Je créé mon torpilleur, il se place dans le premier nœud de ma liste (je l'ai vérifié), puis je créé mon cuirasse1 mais sur des coordonnées de torpilleur et c'est la que ça plante... Il reste un certain temps en dehors de la boucle while du donneelement(i) mais il fini par y rentrer je ne sais pour quelle raison ..

    HELP !

    Laure
    Images attachées Images attachées  

  6. #6
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    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
     
    public Navires DonneElement(int i){
    			//System.out.println(i);
    		//On traite le cas ou la liste est vide
    			if(vide()){
    			System.out.println("La liste est vide");
    			}
     
    			int j = 0;
    			NodeNav Ncourant = new NodeNav(getPremier().getNavire());//getPremier() renvoie null ici, il n'est pas instancié quand ta liste est vide
    			//System.out.println(j);
    			while (j!=i){
    					//System.out.println("rentré dans le while");
    				Ncourant=Ncourant.getSuivant();
    				j++;
    				//System.out.println(j);
    				}
    		    return Ncourant.getNavire();	
    		}
    Réponse en commentaire
    Je ne suis pas mort, j'ai du travail !

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    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
    public Navires DonneElement(int i){
     
    		//On traite le cas ou la liste est vide
    			if(vide()){
    			System.out.println("La liste est vide");
    			}
     
    			int j = 0;
    			System.out.println(getPremier().getNavire().getNomNavire()); // J'ai ajouté ça pour voir ce qu'il y a dans getPremier()
    			NodeNav Ncourant = new NodeNav(getPremier().getNavire());
    			//System.out.println(j);
    			while (j!=i){
    					//System.out.println("rentré dans le while");
    				Ncourant=Ncourant.getSuivant();
    				j++;
    				//System.out.println(j);
    				}
    		    return Ncourant.getNavire();	
    		}
    J'ai ajouté la ligne 9 pour voir ce que ça me donnait :

    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Torpilleur
    Exception in thread "main" java.lang.NullPointerException
    at BatNav.ListeNav.DonneElement(ListeNav.java:145)
    at BatNav.Navires.positionnement(Navires.java:156)
    at BatNav.Joueur.RemplirListeBateau(Joueur.java:43)
    at BatNav.Joueur.<init>(Joueur.java:25)
    at BatNav.ListeNav.main(ListeNav.java:155)

    voila, donc à priori le getPremier() ne me renvoi pas null.. et le NullPointer Exception est sur la ligne du return Ncourant.getNavire();
    Je ne comprend toujours pas du coup..

    Donc j'ai essayé de voir dans le Ncourant en rajoutant à nouveau une ligne de System.out.println

    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
    public Navires DonneElement(int i){
     
    		//On traite le cas ou la liste est vide
    			if(vide()){
    			System.out.println("La liste est vide");
    			}
     
    			int j = 0;
    			System.out.println(getPremier().getNavire().getNomNavire()); // J'ai ajouté ça pour voir ce qu'il y a dans getPremier()
    			NodeNav Ncourant = new NodeNav(getPremier().getNavire());
    			System.out.println(Ncourant.getNavire().getNomNavire()+"2"); //J'ai également ajouté cette ligne
    			while (j!=i){
    					//System.out.println("rentré dans le while");
    				Ncourant=Ncourant.getSuivant();
    				j++;
    				//System.out.println(j);
    				}
    		    return Ncourant.getNavire();	
    		}
    et la j'ai le même résultat sauf que j'alterne Torpilleur et TOrpilleur2
    Donc je pense vraiment que le problème se situe dans la boucle while avec le getSuivant qui me met à null mon Ncourant, mais je ne sais pas pourquoi pour le deuxième bateau il rentre dans la boucle vu que le Ncourant doit être égal au Premier ...

    J'espère que je suis claire .. :s

    Laure

  8. #8
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    En voyant ton code et en réfléchissant à ce que tu essayes de faire, je suis en train de me rendre compte que tu es en train de réinventer la roue.

    Du coup, je vais te poser quelques questions auxquelles tu devras répondre algorithmiquement (c'est à dire sans penser au code, mais en pensant à ce que tu VEUX comme résultat quand tu appelles la méthode, étape par étape) :

    - Qu'est censé faire ta méthode donneElement(int i)? A récupérer le navire en position i dans ta liste?
    - Avant ta boucle, tu crées un Node que tu appelles NodeCourant et que tu construis avec un navire, et ensuite tu "boucle" sur ce noeud. Du coup, le navire contiendrait des noeuds?(Du coup, un noeud contient un navire et un navire connait la liste des noeuds adjacents? si c'est ça, y'a un problème de conception avec les objets qui sont interdépendants et qui ont plusieurs fonctions)
    - Tu as deux objets qui s'appelles liste qqchose : ListBat et ListCoord, quel contiennent t'elles? Quel est leur but? A priori, ce sont de simples listes qui ont des méthodes qui font globalement de travail déjà existant dans l'API collection : pourquoi les refaire?pourquoi ne pas utiliser une simple ArrayList ou une ArrayDeque si tu veux facilement ajouter/enlever des éléments en debut/fin de liste?


    Pour faire court, je pense que ton problème vient du tests sur la boucle qui est while(j!=i) : tu boucle sur un index mais tu ne vérifie pas par la suite que ton élément est null ou pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (j!=i){
    	Ncourant=Ncourant.getSuivant(); // si l'appel précédent renvoyait null, ça pètera au prochain passage si j est toujours différent de i
    	j++;	
    }
    Ce qui pousserait à dire qu'il y a un problème dans le code de tes listes... Ce qui me pousse à te dire : utilises des collections existantes !
    Enfin avant tout, rajoute un test de nullité ici pour voir si le problème vient de là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while (j!=i){
    	if (Ncourant == null){
    		System.out.println("C'est null, ça devrait pas, ça va péter");
    	}
    	Ncourant=Ncourant.getSuivant(); // si l'appel précédent renvoyait null, ça pètera au prochain passage si j est toujours différent de i
    	j++;	
    }
    J'espère que je suis claire .. :s
    Non, tu es Laure (je sais, cette blague est nulle)



    Sinon, j'insiste, mais pour la lisibilité :
    - Les classes ont la première lettre en majuscule
    - Les variables ont la première lettre en minuscule
    - Les méthodes ont la première lettre en minuscule
    - Les constantes de classe sont écrites entièrement en majuscule (les variables déclarées static final)
    Je ne suis pas mort, j'ai du travail !

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    - Le but de donneElement(i) est de renvoyer le ieme élément de la liste
    algorithme : si la liste est vide on ne fait rien
    sinon on parcourt la liste du premier élément jusqu'à l'élément i
    une fois arrivé à l'élément i, on renvoi l'objet navire qui est placé dans le nœud.
    Pour parcourir la liste je créé un nœud fictif : ncourant qui va se déplacer, pour cela on remplace progressivement ncourant par le nœud suivant.

    - En fait, pour le ncourant (donc mon nœud fictif) au début je n'avais mis que NodeNav ncourant = PREMIER ; mais j'avais le null pointer exception au niveau du ncourant.getsuivant() donc je me suis dis que peut être que mon ncourant était null donc j'ai testé en le remplissant avec le navire du premier nœud. Mais apparemment c'est une mauvaise solution

    - Sinon pourquoi est ce que je n'utilise pas l'API collection ? C'est une excellente question qu'il faudra poser à mes professeurs qui imposent de créer nos listes nous même !
    Initialement le programme fonctionnait avec des ArrayList et la j'essaye de le réadpater aux exigences de l'examen..

    J'ai remodifiié le code :
    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
    //Méthode qui me donne l'élément "i" de la liste
     
     
    public Navires DonneElement(int i){
     
     
    //On traite le cas ou la liste est vide
     
    if(vide()){
     
    System.out.println("La liste est vide");
     
    }
     
     
    NodeNav ncourant = premier;
     
    System.out.println(ncourant.getNavire().getNomNavire());
     
    int j = 0;
     
    while (j!=i){
     
    if (ncourant == null){
     
    System.out.println("aie aie aie");
     
    } 
     
    ncourant=ncourant.getSuivant();
     
     
    j++;
     
     
    }
     
    return ncourant.getNavire(); 
     
    }
    et cela ne marche toujours pas ...
    J'ai un nullpointerexception au niveau de ncourant=ncourant.getSuivant(); puis il me renvoi "Torpilleur" (premier navire de la liste) puis "aie aie aie" ...

    Je suis perdue ! Ca craint !

    Laure

  10. #10
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    - Le but de donneElement(i) est de renvoyer le ieme élément de la liste
    algorithme : si la liste est vide on ne fait rien
    Alors ça ne marche pas vu que ton test ne fait qu'afficher quelque chose mais qu'il continue quand même derrière ^^

    Bon, si je comprends bien, l'idée de vos profs c'est de vous faire coder vos propres listes... Pourquoi pas.
    Du coup, essayes de te cantonner dans tes listes à ce qu'elles doivent faire : la liste !
    En gros, une liste, tu peux lui ajouter des éléments, supprimer des éléments, vérifier sa taille... Quel que soit l'élément qui est à l'intérieur !
    Ton implémentation ressemble beaucoup à une liste chaînée, partons donc sur ce principe

    Crée toi une classe ListElement, qui pourra contenir un objet (ton navire) ainsi que des liens vers l'élément suivant (ListElement) et l'élément précédent (donne moi 20 minutes et je te donne un squelette à compléter)


    Voici un code qui permet de gérer une liste chaînée avec les méthodes d'ajout et de récupération à un index précis
    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
     
    public class MyList<T> {
     
    	// noeud racine
    	private ListElement rootNode;
     
    	// taille de la liste, rajouter la méthode vide en testant si c'est égal à 0
    	private int size = 0;
     
    	// ajout d'un item à la fin de la liste
    	public void add(T item){
    		size++;
    		ListElement elt = new ListElement(item);
    		if (rootNode == null){
    			rootNode = elt;
    		} else {
    			ListElement lastNode = getLastNode();
    			lastNode.setNextElement(elt);
    			elt.setPreviousElement(lastNode);
    		}
    	}
     
    	/**
             * Ajout à un index précis
             * @param i index
             */
    	public void add(int i, T item){
     
    		ListElement elt = new ListElement(item);
    		if (i > size || i < 0){
    			throw new IndexOutOfBoundsException("Index hors scope");
    		} else {
    			size++;
    			int indexCourant = 0;
    			ListElement current = rootNode;
    			while (indexCourant < i){
    				current = current.getNextElement();
    				indexCourant++;
    			}
    			// rechainage des éléments
    			ListElement previous = current.getPreviousElement();
    			if (current != null){
    				current.setPreviousElement(elt);
    			}
    			if (previous != null){
    				previous.setNextElement(elt);
    			}
    			elt.setPreviousElement(previous);
    			elt.setNextElement(current);
     
    			if (elt.getPreviousElement() == null){
    				rootNode = elt;
    			}
    		}
    	}
     
    	// récupération de l'item en position i
    	// il faudrait gérer le cas de i > size
    	public T get(int i){
    		if (size == 0) {
    			return null;
    		}
     
    		int indexCourant = 0;
    		ListElement current = rootNode;
    		while (indexCourant < i){
    			current = current.getNextElement();
    			indexCourant++;
    		}
    		return current.getItem();
    	}
     
    	/** 
             * recherche du dernier noeud
             * @return
             */
    	private ListElement getLastNode() {
    		ListElement last = null;
    		if (rootNode != null){
    			last = rootNode;
    			ListElement next = rootNode.getNextElement();
    			while ( next != null){
    				last = next;
    				next = next.getNextElement();
    			}
    		}
    		return last;
    	}
     
    	// classe interne pour stocker les éléments dans ta liste
    	class ListElement {
     
    		private T item;
     
    		private ListElement previousElement;
     
    		private ListElement nextElement;
     
    		public ListElement(T item){
    			this(item, null, null);
    		}
     
    		public ListElement(T item, ListElement previousElement,
    				ListElement nextElement) {
    			super();
    			this.item = item;
    			this.previousElement = previousElement;
    			this.nextElement = nextElement;
    		}
     
    		public T getItem() {
    			return item;
    		}
     
    		public void setItem(T item) {
    			this.item = item;
    		}
     
    		public ListElement getPreviousElement() {
    			return previousElement;
    		}
     
    		public void setPreviousElement(ListElement previousElement) {
    			this.previousElement = previousElement;
    		}
     
    		public ListElement getNextElement() {
    			return nextElement;
    		}
     
    		public void setNextElement(ListElement nextElement) {
    			this.nextElement = nextElement;
    		}
    	}
    }
    Avatange : tu mets CE QUE TU VEUX dedans... Pas de notion de Navire ou quoi que ce soit qui n'a pas de lien avec le fonctionnement d'une liste

    Il ne faut pas oublier que pour être simple : chaque objet doit avoir un but unique et précis. Ma list MyList permet de gérer des éléments de liste les uns par rapport aux autres. Les éléments stockent des objets et connaissent leur voisin (et c'est tout, ils ne gèrent pas les interactions avec leurs voisins)


    Il ne te reste qu'à faire la méthode de suppression par index (donc trouver par identifiant et refaire le chainage entre les éléments précédents et suivants... Et décrémenter la taille de la liste)
    Je ne suis pas mort, j'ai du travail !

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    J'ai repris le schéma de mes profs pour la liste chainée, c'est à dire créer une classe qui gère la liste et créer une classe qui gère les nœuds. Si ca ne va pas je changerai, tiens je t'envoi la classe liste navire et la classe nœud

    La classe NodeNav :

    [CODE]package BatNav;

    //CLasse réalisée par Laure
    //Cette classe s'occupe des noeuds de la liste de Navires

    /* Méthode de la classe
    * - constructeur
    * - getters and setters
    */

    public class NodeNav {

    //déclaration des variables utiles
    protected Navires n;
    protected NodeNav suivant;

    //constructeur de NodeNav, on initiailise les variables utiles
    public NodeNav (Navires n){
    this.n=n;
    this.suivant=null;
    }

    //getters and setters
    public Navires getNavire() {
    return n;
    }

    public void setNavire(Navires n) {
    this.n = n;
    }

    public NodeNav getSuivant() {
    return suivant;
    }

    public void setSuivant(NodeNav suivant) {
    this.suivant = suivant;
    }
    }[/CODE

    La classe ListeNav :

    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
    package BatNav;
     
    //Classe réalisée par Laure
     
    /*Méthode de la classe : 
     * 	- constructeur 
     * 	- getters and setters 
     * 	- méthode qui test si la liste est vide : vide()
     * 	- méthode qui ajoute un objet à la fin de la liste : AjoutNavFin(NodeNav N)
     * 	- méthode qui supprime un noeud de la liste : SuprNav(Navires N)
     * 	- méthode qui donne le nombre d'éléments de la liste : NbElement()
     * 	- méthode qui renvoi la valeur du ième élément de la liste : DonneElement()
     * 	- main de test de méthode
     */
     
    //Creation de la classe liste chainée qui recevra les différents types de Navires de chaque joueur 
    public class ListeNav {
     
    		private NodeNav premier; 
     
    		//constructeur
    		public ListeNav(){
    			this.premier=null;
    		}
     
     
    		//getters and setters
    		public NodeNav getPremier() {
    			return premier;
    		}
     
    		public void setPremier(NodeNav premier) {
    			this.premier = premier;
    		}
     
    		//méthode qui test si la liste est vide (on l'utilisera lorsqu'on testera si le joueur à gagner ou non)
    		//J'ai repris la métode du TD
    		public boolean vide(){
    			return premier == null; 
    		}
     
    		//Méthode qui ajoute un objet navire à la fin de la liste 
    		//J'ai repris la méthode du TD 
    		public void ajoutNavFin(Navires n) {
    			NodeNav nn= new NodeNav(n);
     
    			// cas particulier List vide
    			if (premier == null){
    				premier = nn;
    			}	
    			else {
     
    				//On créé Ncourant : noeud courant (noeud sur lequel nous menons l'étude à un moemnt donné)
    				NodeNav ncourant = premier;
     
    				// avancer tant que suivant non null
    				while (ncourant.getSuivant() != null) {
    					ncourant = ncourant.getSuivant();
    				}
     
    				// ici suivant est null
    				// on peut donc inserer le noeud N
     
    				ncourant.setSuivant(nn);
    			}
    		}
     
    		//Méthode qui supprime un noeud de la liste
    		//Dans cette méthode, on cherche le noeud qui précède le noeud à supprimer
    		public void suprNav(Navires n){
     
    			//cas de la liste vide 
    			if(vide()){
    				return;
    			}
     
    			else {
     
    				//le premier élément n'a pas d'élément qui le précède
    				//Son deuxième élèment est null donc on met le premier égal au deuxième 
    				//note : on pourrait mettre directement null, mais je garde ici la méthode utilisée dans le cas ou le premier élément est différent de la valeur voulue 
    				if (premier.getNavire()==n){
    					premier=premier.getSuivant();
    				}
    				else {
    					NodeNav ncourant = premier; //On créé un noeud de "parcours" fictif, qu'on place sur le premier noeud (comme à la méthode précédente)
    					NodeNav suivNcourant = premier.getSuivant(); //On référence également le noeud suivant le noeud de parcours
     
    					//On cherche à positionner SuivNcourant sur le noeud à supprimer 
    					while (suivNcourant != null && suivNcourant.getNavire() != n){
    						//note : attention à l'ordre ! 
    						ncourant = suivNcourant; 
    						suivNcourant = suivNcourant.getSuivant(); 
    					}
     
    					/* à la sortie de la boucle
    					 * soit il n'y avait pas de navire N et le "noeud suivant le noeud courant" est null
    					 * soit on est sur le noeud suivant le noeud courant contient la même chose que le noeud N
    					 */
     
    						if(suivNcourant != null){
    							ncourant.setSuivant(suivNcourant.getSuivant());
    						}
    				}
    			}
    		}
     
    		//Méthode qui donne le nombre d'élément de la liste 
     
    		public int nbElement(){
    		//On traite le cas ou la liste est vide
    			if(vide()){
    				return 0;
    			}
     
    		    int i=1; //Variable nous servant à l'incrémentation
    			NodeNav ncourant = premier;
     
    			while (ncourant != null){
    				ncourant = ncourant.getSuivant();
    				i++;
    			}
    			return i; 
    		}
     
    		//Méthode qui me donne l'élément "i" de la liste
     
    		public Navires donneElement(int i){
     
    		//On traite le cas ou la liste est vide
    			if(vide()){
    			System.out.println("La liste est vide");
    			}
     
    			NodeNav ncourant = premier;
    			System.out.println(ncourant.getNavire().getNomNavire());
    			int j = 0;
    			while (j!=i){
    				if (ncourant == null){
    					System.out.println("aie aie aie");
    				}	
    				ncourant=ncourant.getSuivant();
     
    				j++;
     
    			}
    		    return ncourant.getNavire();	
    		}
     
    		//Main de test de méthode 
    		public static void main (String args[]){
     
    			ListeNav testListe = new ListeNav();
    			testListe.vide();
     
    			ListeCoord testListeCo = new ListeCoord(); 			
    			Joueur j = new Joueur ("JTest",1,false,testListeCo);
    	        int tabTest[][] = new int[2][2];
    			int tabTest1[][] = new int[2][2];
    			int tabTest2[][] = new int[2][2];
    			int tabTest3[][] = new int[2][2];
     
    			//on test l'ajout de Navires et la suppression du premier élément
    			Navires testNav = new Navires("B1",2,tabTest,false,j);
    			testListe.ajoutNavFin(testNav);
    			testListe.suprNav(testNav);
     
    			//on test les méthodes dans le cas d'un noeud quelconque de la liste 
    			Navires testNav1 = new Navires("B2",2,tabTest1,false,j);
    			Navires testNav2 = new Navires("B3",2,tabTest2,false,j);
    			Navires testNav3 = new Navires("B4",2,tabTest3,false,j);
    			testListe.ajoutNavFin(testNav);
    			testListe.ajoutNavFin(testNav1);
    			testListe.ajoutNavFin(testNav2);
    			testListe.ajoutNavFin(testNav3);
    			testListe.nbElement();
    			testListe.donneElement(3);
    			testListe.suprNav(testNav2);
    		}
    }

    voila ..

  12. #12
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Je t'ai mis un bout de code fait maison pour gérer une liste chainée, je te laisse regarder et adapter si besoin
    Je ne suis pas mort, j'ai du travail !

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Je ne trouve pas ton bout de code :s

  14. #14
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Remonte un peu, je l'ai mis dans le post où je te demandais de me laisser un peu de temps pour te proposer un squelette pour gérer ta liste chainée

    http://www.developpez.net/forums/d15...n/#post8249433
    Je ne suis pas mort, j'ai du travail !

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Ca y est ! Victoire ! Ca marche ! merciiiiiiiii !!!

    Je vais te garder sous le coude au cas ou ! ^^

    Aller je repars sur mon code ! Ce coup ci les coordonnées ne s'enregistrent pas ! Je peux le faire !

    Encore merci !! et Bonne après midi !!

    Laure

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

Discussions similaires

  1. Problème NullPointerException
    Par sarra7 dans le forum Android
    Réponses: 2
    Dernier message: 01/05/2015, 17h18
  2. Réponses: 15
    Dernier message: 13/02/2015, 17h04
  3. Problème NullPointerException en POST mais pas en GET
    Par Tonyo38 dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 03/07/2014, 09h35
  4. Comment résoudre le problème : NullPointerException
    Par ABS_AGH dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/01/2014, 15h56
  5. [JNI] Problème NullPointerException
    Par jabesq dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 08/07/2009, 10h22

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