Problem avec programme polymorphisme

cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 - 30 janv. 2010 à 12:11
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 - 5 févr. 2010 à 17:03
Bonjour,
j'ai essayé le prg 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


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[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");
    	}
    }
}

12 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
30 janv. 2010 à 12:59
Salut,

Relis ton code :
public Ville(String pNom,String pPays,int pNbre)

En effet, ton constructeur demande :
String, String, int
et non :
String, int, String
______________________________________
DarK Sidious
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
30 janv. 2010 à 16:54
Merci pour le réponse rapide
mais j'ai un pb dans le résultat

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
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
31 janv. 2010 à 20:22
aidez moi s'il vous plaît
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
1 févr. 2010 à 16:15
il n'y a personne pour m'aider
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
1 févr. 2010 à 16:24
Salut,

Le mieux qu'en tu as des erreurs d'algorithme comme celui-là, c'est de mettre un point d'arrêt pour voir ce qui se passe... ici en l'occurence, il ne passe pas dans le setCategorie pour une Capitale...
______________________________________
DarK Sidious
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
1 févr. 2010 à 19:28
dit moi,quel ligne je dois corrigé,et quoi mettre,je suis completement perdu, s'il te plaît
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
1 févr. 2010 à 19:54
Salut,

C'est pas en te donnant la ligne à corriger que tu progresseras... apparement, tu n'as toujours pas compris cà... et à chaque fois que tu as un petit problème, tu reviens nous voir avec des questions où tu perdrais moins de temps si tu comprenais ce que tu fais.

Je t'ai donné l'astuce : "mettre un point d'arrêt pour voir ce qui se passe"
______________________________________
DarK Sidious
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
1 févr. 2010 à 19:57
que veux tu dire "mettre un point d'arrêt"
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
1 févr. 2010 à 20:04
j'ai corrigé ainsi:
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();
this.categorie=categorie;
president="aucun";

}

//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 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");
    	}	
    }
}


maintenant il y a une erreur suivant dans la class Sdz1
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The constructor Capitale(String, int, String, String) is undefined

at Mypackage1.Sdz1.main(Sdz1.java:24)
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
1 févr. 2010 à 20:58
Salut,

Est-ce que tu comprends le code que tu écris ?
______________________________________
DarK Sidious
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
3 févr. 2010 à 20:57
bonjour
est ce qu'il faut ajouter ces lignes dans la class capital?
public Capitale()
{
//ce mot clé appelle le constructeur de la classe mère
super();
 nomVille = "Inconnu";
         nomPays = "Inconnu";
         nbreHabitant=0;
 this.categorie=categorie;
 president="aucun";	
}
 //constructeur d'initialisation
public void Ville(String pNom,int pNbre,String pPays)
    {
nomVille=pNom;
 nomPays=pPays;
 nbreHabitant=pNbre;
 categorie=this.categorie;
    }
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
5 févr. 2010 à 17:03
merci beaucoup;pb resolu
0