<java>pb avec prg polymorphisme

Fermé
domxaline - 30 janv. 2010 à 10:50
 domxaline - 1 févr. 2010 à 16:13
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.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");
    	}
    }
}
A voir également:

4 réponses

Bonjour,

la réponse à ta question est dans :
The constructor Ville(String, int, String) is undefined 


Il faut regarder comment est défini le constructeur de la classe Ville :
public Ville(String pNom,String pPays,int pNbre)


Il s'agit le compilateur attend des paramètres du type (String,String,int) et toi, en écrivant
Ville V=new Ville(tab[i],tab2[i],"france");

tu donnes comme paramètre (String,int,String).

Il suffit d'inverser tab2[i] et "france".
0
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
lhommeneavantsonpere
30 janv. 2010 à 20:53
public Ville(String pNom,String pPays,int pNbre) ca c est ton contructeur de la classe ville

ds main tu donnes un autre contructeur
Ville V=new Ville(tab[i],tab2[i],"france"); ki n est meme pas definir ds la classe ville
le compiler regarde seulement le types des variables

dc pour lui new Ville(String a,int b,String c) est different de new Ville(String a,String b,int a)


ok change simplement l ordre de tes parametres
Ville v=new Ville( tab[i],"france",tab2[i])
0
merci pour ta réponse
maintenant j'ai problem dans le resultat
vois la poste précedent
0
personne pour m'aider
0
aidez moi s'il vous plaît
0