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 :

problem avec programme polymorphisme


Sujet :

avec Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut problem avec programme polymorphisme
    Bonjour,
    j'ai essayé le progromma suivant;en compilant j'ai erreur suivant
    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The constructor Ville(String, int, String) is undefined

    at Mypackage1.Sdz1.main(Sdz1.java:19)
    aidez moi s'il vous plaît
    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
     
    package Mypackage1;
     
    public class Capitale extends Ville
    {
    	private String president;
    	//constructeur par defaut
    	public Capitale()
    	{
    		//ce mot clé appelle le constructeur de la classe mère
    		super();
    		president="aucun";
    	}
    	//Constructeur d'initialisation de capitale
    	public Capitale(String nom,int hab,String pays,String president)
    	{
    		//super(nom,hab,pays);
    		this.nomVille=nom;
    		this.nomPays=pays;
    	    this.nbreHabitant=hab;
    		this.president=president;
    	}
    	//Description d'une capitale
    	public String decrisToi()
    	{
    		String str=super.decrisToi()+"\n \t==>>"+this.president+"est son president";
    		return str;
    	}
    	//return le nom du president
    	public String getPresident()
    	{
    		return president;
    	}
     
    	//definit le nom du president
    	public void setPresident(String president)
    	{
    		this.president=president;
    	}
    }
     
    package Mypackage1;
    public class Ville 
    {
    	  /*variable publiques qui comptent les instance*/
    	  public static int nbreInstance=0;
    	  /*variable privée qui comptera aussi les instances*/
    	  protected static int nbreInstanceBis=0;
    	  /*Stocke le nom de notre ville*/
    	  protected String nomVille;
    	  /*Stocke le nom du pays de notre ville*/
    	  protected String nomPays;
    	  /*Stocke le nombre d'habitants de notre ville*/
    	  protected int nbreHabitant;
    	  //Stocke le type de notre ville
    	  protected char categorie;
     
    	  //Constructeur par défaut*/
    	  public Ville()
    	  {
             //on incremente nos variables à chaque appel aux constructeurs
    		  nbreInstance++;
    		  nbreInstanceBis++;
     
              nomVille = "Inconnu";
              nomPays = "Inconnu";
              nbreHabitant=0;
              this.setCategorie();
          }
    	  //constructeur d'initialisation
         public Ville(String pNom,String pPays,int pNbre)
         {
        	//on incremente nos variables à chaque appel aux constructeurs
        	 nbreInstance++;
        	 nbreInstanceBis++;
     
        	 nomVille=pNom;
        	 nomPays=pPays;
        	 nbreHabitant=pNbre;
        	 this.setCategorie();
         }
         //********************************************************
         //                                ACCESSEURS
         //********************************************************
         public static int getNombreInstanceBis()
         {
        	 return nbreInstanceBis;
         }
         //Retourne le nom de la ville
         public String getNom()
         {
        	 return nomVille;
         }
     
       //Retourne le nom du pays
         public String getNomPays()
         {
        	 return nomPays;
         }
     
       //Retourne le nombre d'habitants
         public int getNombreHabitant()
         {
        	 return nbreHabitant;
         }
     
         //Retourne la categorie de la ville
         public char getCategorie()
         {
        	 return categorie;
         }
         //********************************************************
         //                                MUTATEURS
         //********************************************************
         //Definit le nom de la ville
         public void setNom(String pNom)
         {
        	 nomVille=pNom;
         }
     
         //Definit le nom du pays
         public void setNomPays(String pPays)
         {
        	 nomPays=pPays;
         }
     
         //Definit le nombre d'habitants
         public void setNombreHabitant(int nbre)
         {
        	 nbreHabitant=nbre;
        	 this.setCategorie();
         }
     
         //********************************************************
         //                   METHODES DE CLASSE
         //********************************************************
         //Definit la categorie de la ville
         private void setCategorie()
         {
        	 int bornesSuperieurs[]={0,1000,10000,100000,500000,1000000,5000000,10000000};
        	 char categories[]={'?','A','B','C','D','E','F','G','H'};
        	 int i=0;
        	 while(i<bornesSuperieurs.length && this.nbreHabitant>=bornesSuperieurs[i])
        		 i++;
        	 this.categorie=categories[i];
         }
     
     
     
    	//Retourne la description de la ville
         public String decrisToi()
         {
        	 return "\t"+this.nomVille+" est une ville de "+this.nomPays+",elle comporte:"+this.nbreHabitant+"=>elle est donc de categorie:"+this.categorie;	 
         }
     
         //Retourne une chaîne de caracteres selon le resultat de la comparaison
         public String comparer (Ville v1)
         {
        	 String str=new String();
        	 if (v1.getNombreHabitant()>this.nbreHabitant)
        		 str=v1.getNom()+"est une ville plus peuplée que"+this.nomVille;
        	 else
        		 str=this.nomVille+" est une ville plus peuplée que "+v1.getNom();
        	 return str;
         }
     
         }
    package Mypackage1;
    public class Sdz1 
    { 
        public static void main(String[] args)
        {
        	// def d'un tableau de ville null
        	Ville[]tableau=new Ville[6];
     
        	//definition d'un tableau de noms de villes et d'un tableau de nombres d'habitants
        	String[] tab={"Marseille","Lille","Caen","Lyon","Paris","Nantes"};
        	int[] tab2={123456,78456,654987,75832165,1594,213};
     
        	//les 3 premiers éléments du tableau seront des Villes,et le reste,des Capitales
        	for(int i=0;i<6;i++)
        	{
        		if(i<3)
        		{
        			Ville V=new Ville(tab[i],tab2[i],"france");
        			tableau[i]=V;
        		}
        		else
        		{
        			Capitale C=new Capitale(tab[i],tab2[i],"france","Sarko");
        			tableau[i]=C;
        		}
        	}
        	//il ne nous reste plus qu'a décrire tout notre tableau
        	for(Ville v:tableau)
        	{
        		System.out.println(v.decrisToi()+"\n");
        	}
        }
    }

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ton constructeur est défini de la manière suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public Ville(String pNom,String pPays,int pNbre)
    Sauf que dans ton mail tu l'appelles comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ville V=new Ville(tab[i],tab2[i],"france");
    Avec tab2, un tableau de int.
    Forcément ça ne va pas fonctionner.
    Permute les deux derniers paramètres.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    merci beaucoup pour votre reponse rapide;
    maintenant dans le resultat il y un problem

    le resultat est le suivant:

    Marseille est une ville de france,elle comporte:123456=>elle est donc de categorie

    Lille est une ville de france,elle comporte:78456=>elle est donc de categorie:C

    Caen est une ville de france,elle comporte:654987=>elle est donc de categorie:E

    Lyon est une ville de france,elle comporte:75832165=>elle est donc de categorie:A
    ==>>Sarkoest son president

    Paris est une ville de france,elle comporte:1594=>elle est donc de categorie:A
    ==>>Sarkoest son president

    Nantes est une ville de france,elle comporte:213=>elle est donc de categorie:A
    ==>>Sarkoest son president

    normalement le résultat pour le Lyon et paris doit avoir
    lyon est le catégorie H
    paris est le catégorie B

    où est ce que je puis faire erreur?
    AIDEZ MOI s'il vous plaît

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Le comportement anormal de tes 3 dernières villes uniquement aurait dû te mettre la puce à l'oreille...

    L'erreur vient du fait que tes trois dernières villes sont des "Capitale".

    Or ton constructeur de capitale n'appelle pas explicitement le constructeur de la classe Ville. Le constructeur Ville() est donc appelé implicitement (cf. cours de base sur le polymorphisme).

    Or, dans celui-ci "setCategorie()" est invoquée sans que le nombre d'habitants ait été initialisé => 0 habitants => catégorie A.

    Toutes tes capitales sont donc automatiquement de catégorie A...

    L'affectation de la population n'est faite qu'après : c'est un parfait exemple d'une mauvaise utilisation du polymorphisme et des erreurs que cela entraine
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    excuse moi, je ne saisie pas,peut tu m'expliquer plus
    s'il te plaît

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Tes 3 dernières villes sont des Capitales.
    Capitale est une classe fille de Ville, par conséquent les constructeurs de Capitale commencent, toujours, par appeler un constructeur de Ville.

    Or, dans ton code, c'est le constructeur de Ville qui calcule la catégorie de la Ville. Il est appelé avant le constructeur de Capitale. Et c'est le constructeur de Capitale qui définit les informations nécessaires pour calculer la catégorie. Catégorie qui, à ce moment-là, a déjà été calculée par le constructeur de Ville.

    Conclusion : le calcul de la catégorie doit être fait après que les informations soient définies. Soit dans le constructeur de Capitale, soit dans le constructeur de Ville mais uniquement avec un constructeur qui définit les infos en questions. Soit au moment où la catégorie est demandée, c'est-à-dire dans decrisToi().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    bonjour
    j'ai modifié "ville.java" ainsi
    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
     
    package Mypackage1;
    public class Ville 
    {
    	  /*variable publiques qui comptent les instance*/
    	  public static int nbreInstance=0;
    	  /*variable privée qui comptera aussi les instances*/
    	  protected static int nbreInstanceBis=0;
    	  /*Stocke le nom de notre ville*/
    	  protected String nomVille;
    	  /*Stocke le nom du pays de notre ville*/
    	  protected String nomPays;
    	  /*Stocke le nombre d'habitants de notre ville*/
    	  protected int nbreHabitant;
    	  //Stocke le type de notre ville
    	  protected char categorie;
     
    	  //Constructeur par défaut*/
    	  public Ville()
    	  {
             //on incremente nos variables à chaque appel aux constructeurs
    		  nbreInstance++;
    		  nbreInstanceBis++;
     
              nomVille = "Inconnu";
              nomPays = "Inconnu";
              nbreHabitant=0;
              //this.setCategorie();
          }
    	  //constructeur d'initialisation
         public Ville(String pNom,String pPays,int pNbre)
         {
        	//on incremente nos variables à chaque appel aux constructeurs
        	 nbreInstance++;
        	 nbreInstanceBis++;
     
        	 nomVille=pNom;
        	 nomPays=pPays;
        	 nbreHabitant=pNbre;
        	 this.setCategorie();
         }
         //****************************************************************************************
         //                                ACCESSEURS
         //***************************************************************************************
         public static int getNombreInstanceBis()
         {
        	 return nbreInstanceBis;
         }
         //Retourne le nom de la ville
         public String getNom()
         {
        	 return nomVille;
         }
     
       //Retourne le nom du pays
         public String getNomPays()
         {
        	 return nomPays;
         }
     
       //Retourne le nombre d'habitants
         public int getNombreHabitant()
         {
        	 return nbreHabitant;
         }
     
         //Retourne la categorie de la ville
         public char getCategorie()
         {
        	 return categorie;
         }
         //***************************************************************************************
         //                                MUTATEURS
         //***************************************************************************************
         //Definit le nom de la ville
         public void setNom(String pNom)
         {
        	 nomVille=pNom;
         }
     
         //Definit le nom du pays
         public void setNomPays(String pPays)
         {
        	 nomPays=pPays;
         }
     
         //Definit le nombre d'habitants
         public void setNombreHabitant(int nbre)
         {
        	 nbreHabitant=nbre;
        	 this.setCategorie();
         }
     
         //********************************************************************
         //                   METHODES DE CLASSE
         //********************************************************************
         //Definit la categorie de la ville
         private void setCategorie()
         {
        	 int bornesSuperieurs[]={0,1000,10000,100000,500000,1000000,5000000,10000000};
        	 char categories[]={'?','A','B','C','D','E','F','G','H'};
        	 int i=0;
        	 while(i<bornesSuperieurs.length && this.nbreHabitant>=bornesSuperieurs[i])
        		 i++;
        	 this.categorie=categories[i];
         }
     
     
     
    	//Retourne la description de la ville
         public String decrisToi()
         {
        	 return "\t"+this.nomVille+" est une ville de "+this.nomPays+",elle comporte:"+this.nbreHabitant+this.setCategorie+"=>elle est donc de categorie:"+this.categorie;	 
         }
     
         //Retourne une chaîne de caracteres selon le resultat de la comparaison
         public String comparer (Ville v1)
         {
        	 String str=new String();
        	 if (v1.getNombreHabitant()>this.nbreHabitant)
        		 str=v1.getNom()+"est une ville plus peuplée que"+this.nomVille;
        	 else
        		 str=this.nomVille+" est une ville plus peuplée que "+v1.getNom();
        	 return str;
         }
     
         }
    maintenant dans
    public String decrisToi()
    setCategorie est souligné
    en mettant souris sur le mot ,j'ai message suivant
    "setCategorie cannot be resolved or is not a field3

  8. #8
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    "setCategorie" est une méthode et tu y accède comme si c'était un champ, tu devrais essayer de mettre this.categorie à la place

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    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
    20
    21
    22
    23
    24
    25
     
    //Constructeur par défaut*/
    	  public Ville()
    	  {
             //on incremente nos variables à chaque appel aux constructeurs
    		  nbreInstance++;
    		  nbreInstanceBis++;
     
              nomVille = "Inconnu";
              nomPays = "Inconnu";
              nbreHabitant=0;
              this.Categorie();
          }
    	  //constructeur d'initialisation
         public Ville(String pNom,String pPays,int pNbre)
         {
        	//on incremente nos variables à chaque appel aux constructeurs
        	 nbreInstance++;
        	 nbreInstanceBis++;
     
        	 nomVille=pNom;
        	 nomPays=pPays;
        	 nbreHabitant=pNbre;
        	 this.Categorie();
         }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Retourne la description de la ville
         public String decrisToi()
         {
        	 return "\t"+this.nomVille+" est une ville de "+this.nomPays+",elle comporte:"+this.nbreHabitant+this.Categorie+"=>elle est donc de categorie:"+this.categorie;	 
         }
     
    toujours pareil Categorie est souligné
    merci pour ton aide

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    t'as une majuscule en trop.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    en corrigeant toujours ces deux categorie suivantes sont soulignés
    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
     //Constructeur par défaut*/
    	  public Ville()
    	  {
             //on incremente nos variables à chaque appel aux constructeurs
    		  nbreInstance++;
    		  nbreInstanceBis++;
    		  
              nomVille = "Inconnu";
              nomPays = "Inconnu";
              nbreHabitant=0;
              this.Categorie();
          }
    	  //constructeur d'initialisation
         public Ville(String pNom,String pPays,int pNbre)
         {
        	//on incremente nos variables à chaque appel aux constructeurs
        	 nbreInstance++;
        	 nbreInstanceBis++;
        	 
        	 nomVille=pNom;
        	 nomPays=pPays;
        	 nbreHabitant=pNbre;
        	 this.Categorie();
    entre d'autre il y a un mouvel ligne aussi souligné dans Sdzi.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        			Ville V=new Ville(tab[i],"france",tab2[i]);

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    comme d"jà dit, categorie est un nom de champ, pas un nom de méthode -> pas de parenthèses derrière! Et en minuscule!

    Ensuite cette ligne

    N'as pas de sens, tu essaie de faire quoi avec ça, je comprend pas

    Pour la dernière erreur, sans le code de la classe impossible de t'aider, mais lire les messages d'erreur de ton compilateur, ce ne serait pas superflu.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    pour la class Sdz1
    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
     
    package Mypackage1;
     
    public class Sdz1 
    { 
        public static void main(String[] args)
        {
        	// def d'un tableau de ville null
        	Ville[]tableau=new Ville[6];
     
        	//definition d'un tableau de noms de villes et d'un tableau de nombres d'habitants
        	String[] tab={"Marseille","Lille","Caen","Lyon","Paris","Nantes"};
        	int[] tab2={123456,78456,654987,75832165,1594,213};
     
        	//les 3 premiers éléments du tableau seront des Villes,et le reste,des Capitales
        	for(int i=0;i<6;i++)
        	{
        		if(i<3)
        		{
        			Ville V=new Ville(tab[i],"france",tab2[i]);
        			tableau[i]=V;
        		}
        		else
        		{
        			Capitale C=new Capitale(tab[i],tab2[i],"france","Sarko");
        			tableau[i]=C;
        		}
        	}
        	//il ne nous reste plus qu'a décrire tout notre tableau
        	for(Ville v:tableau)
        	{
        		System.out.println(v.decrisToi()+"\n");
        	}
     
        }
    }
    pour le categorie j'ajoute class ville
    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
     
    package Mypackage1;
    public class Ville 
    {
    	  /*variable publiques qui comptent les instance*/
    	  public static int nbreInstance=0;
    	  /*variable privée qui comptera aussi les instances*/
    	  protected static int nbreInstanceBis=0;
    	  /*Stocke le nom de notre ville*/
    	  protected String nomVille;
    	  /*Stocke le nom du pays de notre ville*/
    	  protected String nomPays;
    	  /*Stocke le nombre d'habitants de notre ville*/
    	  protected int nbreHabitant;
    	  //Stocke le type de notre ville
    	  protected char categorie;
     
     
    	  //Constructeur par défaut*/
    	  public Ville()
    	  {
             //on incremente nos variables à chaque appel aux constructeurs
    		  nbreInstance++;
    		  nbreInstanceBis++;
     
              nomVille = "Inconnu";
              nomPays = "Inconnu";
              nbreHabitant=0;
              //this.categorie;
          }
    	  //constructeur d'initialisation
         public Ville(String pNom,String pPays,int pNbre)
         {
        	//on incremente nos variables à chaque appel aux constructeurs
        	 nbreInstance++;
        	 nbreInstanceBis++;
     
        	 nomVille=pNom;
        	 nomPays=pPays;
        	 nbreHabitant=pNbre;
        	 this.Categorie;
         }
         //****************************************************************************************
         //                                ACCESSEURS
         //***************************************************************************************
         public static int getNombreInstanceBis()
         {
        	 return nbreInstanceBis;
         }
         //Retourne le nom de la ville
         public String getNom()
         {
        	 return nomVille;
         }
     
       //Retourne le nom du pays
         public String getNomPays()
         {
        	 return nomPays;
         }
     
       //Retourne le nombre d'habitants
         public int getNombreHabitant()
         {
        	 return nbreHabitant;
         }
     
         //Retourne la categorie de la ville
         public char getCategorie()
         {
        	 return categorie;
         }
         //***************************************************************************************
         //                                MUTATEURS
         //***************************************************************************************
         //Definit le nom de la ville
         public void setNom(String pNom)
         {
        	 nomVille=pNom;
         }
     
         //Definit le nom du pays
         public void setNomPays(String pPays)
         {
        	 nomPays=pPays;
         }
     
         //Definit le nombre d'habitants
         public void setNombreHabitant(int nbre)
         {
        	 nbreHabitant=nbre;
        	 this.setCategorie();
         }
     
         //********************************************************************
         //                   METHODES DE CLASSE
         //********************************************************************
         //Definit la categorie de la ville
         protected void setCategorie()
         {
        	 int bornesSuperieurs[]={0,1000,10000,100000,500000,1000000,5000000,10000000};
        	 char categories[]={'?','A','B','C','D','E','F','G','H'};
        	 int i=0;
        	 while(i<bornesSuperieurs.length && this.nbreHabitant>=bornesSuperieurs[i])
        		 i++;
        	 this.categorie=categories[i];
         }
     
     
     
    	//Retourne la description de la ville
         public String decrisToi()
         {
        	 return "\t"+this.nomVille+" est une ville de "+this.nomPays+",elle comporte:"+this.nbreHabitant+this.categorie+"=>elle est donc de categorie:"+this.categorie;	 
         }
     
         //Retourne une chaîne de caracteres selon le resultat de la comparaison
         public String comparer (Ville v1)
         {
        	 String str=new String();
        	 if (v1.getNombreHabitant()>this.nbreHabitant)
        		 str=v1.getNom()+"est une ville plus peuplée que"+this.nomVille;
        	 else
        		 str=this.nomVille+" est une ville plus peuplée que "+v1.getNom();
        	 return str;
         }
     
         }

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    bonjour
    j'ai changé le code de la class capitale comme ceci:
    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
     
    package Mypackage1;
    public class Capitale extends Ville
    {
    	private String president;
    	//constructeur par defaut
    	public Capitale(String nom, int hab, String pays)
    	{
    		//ce mot clé appelle le constructeur de la classe mère
    		super(nomVille, hab, pays);
    		nomVille = "Inconnu";
    		nomPays = "Inconnu";
            nbreHabitant=0;
    		president="aucun";
    	}
    	//Constructeur d'initialisation de capitale
    	public Capitale(String nom,int hab,String pays,String president)
    	{
    		super(nom,hab,pays);
    		nomVille=this.nomVille;
    		nomPays=this.nomPays;
    		nbreHabitant=this.nbreHabitant;
    	}
    	//Description d'une capitale
    	public String decrisToi()
    	{
    		String str=super.decrisToi()+"\n \t==>>"+this.president+"est son president";
    		return str;
    	}
    	//return le nom du president
    	public String getPresident()
    	{
    		return president;
    	}
     
    	//definit le nom du president
    	public void setPresident(String president)
    	{
    		this.president=president;
    	}
    }
    toujours le résultat est comme ceci:
    Marseille est une ville de france,elle comporte:123456=>elle est donc de categorie

    Lille est une ville de france,elle comporte:78456=>elle est donc de categorie:C

    Caen est une ville de france,elle comporte:654987=>elle est donc de categorie:E

    Inconnu est une ville de Inconnu,elle comporte:0=>elle est donc de categorie:A
    ==>>nullest son president

    Inconnu est une ville de Inconnu,elle comporte:0=>elle est donc de categorie:A
    ==>>nullest son president

    Inconnu est une ville de Inconnu,elle comporte:0=>elle est donc de categorie:A
    ==>>nullest son president


    dans le resultat:à la place Paris,Nantes,Lyon marqué inconnu et tous les trois
    en class A.à la place sarko est marqué null

    aidez moi

  15. #15
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Tes constructeurs sont incohérent et mélangent toutes les variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	public Capitale(String nom, int hab, String pays)
    	{
    		//ce mot clé appelle le constructeur de la classe mère
    		super(nomVille, hab, pays);
    		nomVille = "Inconnu";
    		nomPays = "Inconnu";
            nbreHabitant=0;
    		president="aucun";
    	}
    ce constructeur met explicitement le président, le nom de pays et le nom de la ville à "aucun" -> pas étonnant que tu récupère ça en retour. En plus le premier paramètre du constructeur parent est "nomVille" qui est un champ non initialisé -> "null" et qui est incohérent avec le constructeur plus bas ou l'on passe au même constructeur parent, cette fois-ci, un nom de pays.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	public Capitale(String nom,int hab,String pays,String president)
    	{
    		super(nom,hab,pays);
    		nomVille=this.nomVille;
    		nomPays=this.nomPays;
    		nbreHabitant=this.nbreHabitant;
    	}
    Ici, tu ignore le président passé en paramètre, tu stocke this.nbreHabitant sur lui-même (pas très utilise comme ligne de code), pareil pour nomPays et nomVille => les trois dernière lignes de ce constructeur ne servent à rien, elle ne font rien (ton ide si tu en utilise un doit d'ailleurs te les avoir soulignée avec un warning "assignement d'une variable à elle même")

    Bref corrige tes constructeurs afin qu'ils aient une certaine logique. Passe les bon paramètres au parent. Et travail avec les bonne variables. Ne mélange pas tout.

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    merci beaucoup,je les trouvé

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

Discussions similaires

  1. [libraries] problemes avec le polymorphisme
    Par ikeas dans le forum Langage
    Réponses: 22
    Dernier message: 04/12/2014, 16h51
  2. probleme avec programme utilisant mysql
    Par cosmoff dans le forum Débuter
    Réponses: 15
    Dernier message: 14/08/2013, 18h58
  3. probleme avec programme console
    Par ..::snake::.. dans le forum C++Builder
    Réponses: 12
    Dernier message: 03/06/2007, 14h24
  4. probleme avec programmation objet
    Par kain31 dans le forum C++
    Réponses: 5
    Dernier message: 17/04/2007, 11h29
  5. Réponses: 14
    Dernier message: 09/05/2006, 15h23

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