Exercice modélisant des personnes pouvant se marrier et avoir des enfants [Résolu]

fpat 11 Messages postés mercredi 8 octobre 2008Date d'inscription 20 décembre 2008 Dernière intervention - 8 oct. 2008 à 18:43 - Dernière réponse : fpat 11 Messages postés mercredi 8 octobre 2008Date d'inscription 20 décembre 2008 Dernière intervention
- 16 oct. 2008 à 16:52
Bonjour, je n'ai aucun affichage à l'exécution et je ne comprends pas
En rouge la consigne et en bleu mon programme

- Écrire la classe Personne:
- attributs: nom, prénom, age, genre, état (vivant ou mort) et éventuellement un conjoint (qu'on a épousé) et des enfants
- constructeur prenant en paramètres un nom, un prénom et un genre ('m' ou 'f'). L'objet créé correspond à un enfant qui vient de naître
- void meurs() ...
- boolean vieillis(): augmente l'âge de la personne d'un si elle est vivante; et la fait mourrir si elle dépasse les 120 ans. Retourne false si la personne était déjà morte.
- boolean epouse (Personne p): l'instance de Personne sur laquelle on appelle cette méthode ainsi que p vont devenir conjoint (s'ls ont plus de 18, si aucun des deux n'est marié, si c'est un couple hétérosexuel et s'ils sont vivants). Retourne true si le mariage a été effectué.
- Personne engendre(String prenom, char genre): La personne ainsi que son conjoint ont un enfant dont e prénom et le genre sont donnés en paramètres et dont le nom est celui du père. La méthode retourne null si la personne n'était pas mariée.
- void affiche_enfants(): affiche le nom et prénom de chacun des enfants de cette personne
- void affiche_descendance(): affiche le nom et prénom de chacune des personnes qui descendent de cete personne.

class Personne
{
String nom, prenom;
char genre;
int age;
boolean vivant;
Personne enfant[]=new Personne[10];
Personne conjoint;
int nec; /*nombres d'enfants crees*/



Personne(String nom, String prenom, char genre)
{
this.nom=nom; this.prenom=prenom; this.genre=genre; vivant=true; age=0; conjoint=null;
}



void meurs() { vivant=false; }



boolean vieillis()
{
if (vivant == true)
 {
 if (age > 120) { meurs(); return false; }
 else { age=age+1; return true; }
 }
else return false;
}



boolean epouse(Personne p)
{
if  ( (age >= 18 && p.age >= 18) && (conjoint == null && p.conjoint == null) &&   ( (p.genre == 'f' && genre == 'm') || (p.genre == 'm' && genre == 'f') )  && (p.vivant == true && vivant == true) )   return true;
else return false;
}



boolean divorce()
{if (this.conjoint null || conjoint.conjoint null) return false;
else return true;
}



Personne engendre(String prenom, char genre)
{
if (this.conjoint == null) return null;
else
 { if (this.genre 'f') { enfant[nec] new Personne(conjoint.nom,prenom,genre); } else { enfant[nec] = new Personne(this.nom,prenom,genre); }
 nec=nec+1; 
 return enfant[nec-1];
 }
}



void affiche_enfants()
{
int i;
System.out.println("Voici les enfants");
for(i=0; i<=9; i=i+1)
 {
 if (enfant[i] != null) System.out.println("nom: " + this.enfant[i].nom + " prenom: " + this.enfant[i].prenom);
 }
}



void affiche_descendance()
{
int i;
System.out.println("Voici la descendance");
for (i=0; i<=9; i=i+1)
 {
 if (enfant[i] != null) System.out.println( this.enfant[i] );
 }
}





public static void main(String args[])
 {
Personne p1,p2,p3; int i=0;
p1=new Personne("Martin","Pierre",'m');
p2=new Personne("Duval","Marie",'f');
p3=new Personne("Dupont","Jacques",'m');



for(i=0; i<=19; i++) { p1.vieillis(); p2.vieillis(); p3.vieillis(); }
p1.epouse(p2); p1.enfant[0]=p1.engendre("Sophie",'f'); p1.enfant[1]=p1.engendre("Jean",'m'); p1.meurs();
p3.engendre("Alain",'m'); p1.affiche_enfants(); p3.affiche_descendance();
 }
}


FARRUGIA Patrick
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
fpat 11 Messages postés mercredi 8 octobre 2008Date d'inscription 20 décembre 2008 Dernière intervention - 16 oct. 2008 à 16:52
3
Merci
Ca y est j'ai donc trouvé la réponse mes problèmes (grâce à Chatbour), d'ailleurs je voudrais remercier sincèrement Chatbour pour sa patience tout d'abord puis vous montrer le programme répondant au premier message:

class Personne
{
String nom, prenom;
char genre;
int age;
boolean vivant;
Personne enfant[]=new Personne[10];
Personne conjoint;
int nec; /*nombres d'enfants crees*/



Personne(String nom, String prenom, char genre)
{
this.nom=nom; this.prenom=prenom; this.genre=genre; vivant=true; age=0; conjoint=null;
}



void meurs() { vivant=false; }



boolean vieillis()
{
if (vivant == true)
 {
 if (age > 120) { meurs(); return false; }
 else { age=age+1; return true; }
 }
else return false;
}



boolean epouse(Personne p)
{
if  ( (age >= 18 && p.age >= 18) && (conjoint == null && p.conjoint == null) &&   ( genre != p.genre )  && (p.vivant == true && vivant == true) ) {  this.conjoint = p; p.conjoint = this; return true; }
else return false;
}



boolean divorce()
{if (this.conjoint null || conjoint.conjoint null) return false;
else return true;
}



Personne engendre(String prenom, char genre) {
        if (this.conjoint == null) return null;
        else {
            if (this.genre == 'f') {
                enfant[nec] = new Personne(conjoint.nom,prenom,genre);
            }
            else {
                enfant[nec] = new Personne(this.nom,prenom,genre);
            }
        }
        nec++;
        return enfant[nec-1];
    }



void affiche_enfants()
{
int i;
for(i=0; i<nec; i=i+1)
 {
 if (enfant[i] != null) System.out.println("enfant" + i + " nom: " + this.enfant[i].nom + " prenom: " + this.enfant[i].prenom);
 }
}





void affiche_descendance()
{
int i;
this.affiche_enfants();
for (i=0; i<nec; i++)
 {
 if (this.enfant[i] != null) this.enfant[i].affiche_descendance();
 }
}




 



public static void main(String args[])
 {
Personne p1,p2,p3; int i=0;
p1=new Personne("Martin","Pierre",'m');
p2=new Personne("Duval","Marie",'f');
p3=new Personne("Dupont","Jacques",'m');



for(i=0; i<20; i++) { p1.vieillis(); p2.vieillis(); p3.vieillis(); }
p1.epouse(p2); p1.engendre("Sophie",'f'); p1.engendre("Jean",'m'); p1.meurs(); p2.engendre("Alain",'m');
System.out.println("Enfant de p1"); p1.affiche_enfants();
System.out.println("Descendance de p3"); p3.affiche_descendance();
 }
}





FARRUGIA Patrick

Merci fpat 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de fpat
cs_Chatbour 764 Messages postés jeudi 27 juillet 2006Date d'inscription 6 septembre 2010 Dernière intervention - 8 oct. 2008 à 19:58
0
Merci
Salut,

quelques remarques :
 - dans la méthode divorce() tu dois mettre l'attribut conjoint = null;
 - dans la méthode epouse() tu peux remplacer le test


( (p.genre 'f' && genre 'm') || (p.genre == 'm' && genre == 'f') )


simplement par p.genre != genre ..


tu as oublié aussi de mettre avant this.conjoint = p; avant return true;


 - la méthode engendre() doit tester si le tableau d'enfant est rempli ou non..
 - dans la méthode affiche_enfants() tu peut boucler jusqu'à nec et non pas jusqu'à 9 et tester à chaque fois si enfant[i] == null..
 - dans la méthode main() il n'est pas très beau d'écrire p1.enfant[0]=p1.engendre("Sophie",'f');
p1.enfant[1]=p1.engendre("Jean",'m');
à remplacer par :
p1.engendre("Sophie",'f');
p1.engendre("Jean",'m');

Voici un essai de ma part :
class Personne {
    String nom, prenom;
    char genre;
    int age;
    boolean vivant;
    Personne enfant[]=new Personne[10];
    Personne conjoint;
    int nec; /*nombres d'enfants crees*/

    Personne(String nom, String prenom, char genre) {
        this.nom=nom;
        this.prenom=prenom;
        this.genre=genre;
        vivant=true;
        age=0;
        conjoint=null;
        nec =0;
    }

    void meurs() {
        vivant=false;
    }

    boolean vieillis() {
        if (vivant == true) {
            if (age > 120) { meurs(); return false; }
            else {
                age=age+1;
                return true;
            }
        }
        else
            return false;
    }

    boolean epouse(Personne p) {
        if  ( (age >= 18 && p.age >= 18) && (conjoint == null && p.conjoint == null) && (p.genre != genre) && (p.vivant == true && vivant == true) ) {
            this.conjoint = p;
            return true;
    }
        else
            return false;
    }

    boolean divorce() {        if (this.conjoint null || conjoint.conjoint null)
            return false;
        else {
            this.conjoint = null;
            return true;
        }
    }

    Personne engendre(String prenom, char genre) {        if ( (this.conjoint null) || (nec 9) )
            return null;
        else {
            if (this.genre == 'f') {
                enfant[nec] = new Personne(conjoint.nom,prenom,genre);
            }
            else {
                enfant[nec] = new Personne(this.nom,prenom,genre);
            }
        }
        nec++;
        return enfant[nec-1];
    }

    void affiche_enfants() {
        System.out.println("Voici les enfants");
        for(int i=0; i<nec; i++) {
            System.out.println("nom: " + this.enfant[i].nom + " prenom: " + this.enfant[i].prenom);
        }
    }

    void affiche_descendance() {
        System.out.println("Voici la descendance");
        for (int i=0; i<nec; i++) {
            System.out.println( this.enfant[i] );
        }
    }

    public static void main(String args[]) {
        Personne p1,p2,p3;
        p1=new Personne("Martin","Pierre",'m');
        p2=new Personne("Duval","Marie",'f');
        p3=new Personne("Dupont","Jacques",'m');

        for(int i=0; i<=19; i++) {
            p1.vieillis();
            p2.vieillis();
            p3.vieillis();
        }
        p1.epouse(p2);
        p1.engendre("Sophie",'f');
        p1.engendre("Jean",'m');
        p1.meurs();
        p3.engendre("Alain",'m');
        p1.affiche_enfants();
        p3.affiche_descendance();
    }
}

Cordialement..


_____________________
Vos avis et critiques sur le livre "Objets réactifs en java" de Frédéric Boussinot : contactez moi par MP..
Commenter la réponse de cs_Chatbour
fpat 11 Messages postés mercredi 8 octobre 2008Date d'inscription 20 décembre 2008 Dernière intervention - 8 oct. 2008 à 22:02
0
Merci
Re bonsoir, merci de ta réponse qui est très clair, j'essaye ça et je te dis demain. En tout cas merci encore.

FARRUGIA Patrick
Commenter la réponse de fpat
fpat 11 Messages postés mercredi 8 octobre 2008Date d'inscription 20 décembre 2008 Dernière intervention - 9 oct. 2008 à 19:25
0
Merci
j'ai procédé à des modifications en m'inspirant de ta réponse. J'ai une erreur à la ligne 71 (dont la méthode est):

void affiche_descendance()
{
int i;
System.out.println("Voici la descendance");
for (i= 0; i<=9; i=i+1)
 {
 if (enfant[i] != null) System.out.println( this.enfant[i].affiche_enfants() );  /* ligne 71 */
 }
}

l'erreur est: 'void' not type allowed here.
Pour ce qui est de la méthode void affiche_descendance() j'ai tenté ça (sans conviction) :
void affiche_descendance()
{
int i;
System.out.println("Voici la descendance");
for (i =0; i<=9; i=i+1)
 {
 if (enfant[i] != null) System.out.println( this.enfant[i].affiche_enfants() );
 }
}

Si quelqu'un pourrait répondre à mes questions:
- Quelles sont les lignes de codes pour affiche_descendance()
- Pourquoi le programme cette fois ci affiche une erreur ?
En vous remerciant très sincèrement :)

FARRUGIA Patrick
Commenter la réponse de fpat
cs_Chatbour 764 Messages postés jeudi 27 juillet 2006Date d'inscription 6 septembre 2010 Dernière intervention - 9 oct. 2008 à 20:15
0
Merci
Salut,

tu essayes d'afficher avec la méthode System.out.println() un void ce qui n'est pas permis, ni logique..

essayes de t'inspirer du code que j'ai posté..

je suis là pour toute autre question..


_____________________

Vos avis et critiques sur le livre "Objets réactifs en java" de Frédéric Boussinot : contactez moi par MP..
Commenter la réponse de cs_Chatbour
fpat 11 Messages postés mercredi 8 octobre 2008Date d'inscription 20 décembre 2008 Dernière intervention - 9 oct. 2008 à 20:44
0
Merci
Re re bonsoir lol,

J'ai corrigé mon erreur donc la fonction affiche_enfant() marche bien mais la fonction affiche_descendance() n'affiche rien (ce qui me paraît logique lol), je crois que j'ai aucune idée de code pour affiche_descendance donc si vous pouvez m'aider à trouver.


En vous remerciant encore une fois :p, et surtout en remerciant Chatbour qui me supporte :)

FARRUGIA Patrick
Commenter la réponse de fpat
cs_Chatbour 764 Messages postés jeudi 27 juillet 2006Date d'inscription 6 septembre 2010 Dernière intervention - 9 oct. 2008 à 20:50
0
Merci
De rien ^^

pour la méthode affiche_descendance() je te recommande d'utiliser la récursivité, puisque c'est un parcours d'une arborescence..

je te conseille de lire des cours de base sur le langage java.. visites la page http://java.developpez.com/cours/
, tu trouveras ton bonheur..




Cordialement..






_____________________

Vos avis et critiques sur le livre "Objets réactifs en java" de Frédéric Boussinot : contactez moi par MP..

Si vous remarquez que je fais une faute de français, merci de me la signaler..
Commenter la réponse de cs_Chatbour

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.