Exercice modélisant des personnes pouvant se marrier et avoir des enfants

Résolu
fpat Messages postés 11 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 20 décembre 2008 - 8 oct. 2008 à 18:43
fpat Messages postés 11 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 20 décembre 2008 - 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

7 réponses

fpat Messages postés 11 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 20 décembre 2008
16 oct. 2008 à 16:52
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
3
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 18
8 oct. 2008 à 19:58
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..
0
fpat Messages postés 11 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 20 décembre 2008
8 oct. 2008 à 22:02
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
0
fpat Messages postés 11 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 20 décembre 2008
9 oct. 2008 à 19:25
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
0

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

Posez votre question
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 18
9 oct. 2008 à 20:15
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..
0
fpat Messages postés 11 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 20 décembre 2008
9 oct. 2008 à 20:44
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
0
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 18
9 oct. 2008 à 20:50
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..
0