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 :

votre avis sur le probleme


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut votre avis sur le probleme
    sur la solution a la question posee :

    soit une foree enchantee dans laquelle on peut trouver
    2 types de nains, les barbus et les rase2pres, ces derniers ne se rasent qu'une fois dans l'annee et on connait la date
    et des fees a qui on doit tailler une robe une fois dans l'anne aussi
    donner la liste des taches a faire (raser et robe) ordonnee par ordre chrono
    donner une liste de tous les nains a grand pied

    solution :
    une classe abstraite nains :
    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
     
    public abstract class Nains {
     
        private String nom, pied;
     
        public Nains() {
          this("","");
        }
     
        public Nains(String nom, String pied) {
          this.nom = nom;
          this. pied = pied;
        }
     
        public String getNom(){
          return nom;
        }
     
        public void setNom(String nom){
          this.nom = nom;
        }
     
        public String getPied() {
          return pied;
        }
     
        public void setPied(String pied) {
          this. pied = pied;
        }
     
        public String toString(){
     
          return ("Nom : " + nom + "\nPied : " + pied );
     
        }
    }
     
    2 classes derivees de Nains :
     
    public class Barbu extends Nains{
     
    	public Barbu () {
    		super();
    	}
     
    	public Barbu(String nom, String pied){
    		super(nom,pied);
    	}
     
     
    	public String toString() {
    		String s = super.toString();
    		return s ;
    	}
    }
     
    public class Rase2Pres extends Fleurs implements Comparable{
    	private Date dateRase;
     
    	public Rase2Pres () {
    		super();
    		dateRase = null;
    	}
     
    	public Rase2Pres (String nom, String pied, Date dateRase){
    		super(nom,pied);
    		this.dateRase = dateRase;
    	}
     
    	public String getDateRase() {
    		return dateRase;
    	}
     
    	public void setDateRase(Date dateRase) {
    		this.dateRase = dateRase;
    	}
     
    	public int compareTo(Object o) {
    		return this.dateRase.compareTo( ((Nains)o).dateRase );
    	}
     
    	public String toString() {
    		String s = super.toString();
    		return s + "\nDate rasage : " + dateRase;
    	}
    }
     
    public class RaseS2Pres {
     
    	private ArrayList a = new ArrayList();
     
    	public void add (Rase2Pres  f) {
    		a.add(f);
    	}
     
    	public String toString(){
    		Collections.sort(a);
    		String s = "";
    		for (Object o : a) {
    			s = s + o + "\n\n";
    		}
    		return s;
    	}
    }
     
    public class Test {
     
    	public static void main(String args[]) {
    		Date d1 = new Date(2009,3,15);
    		Date d2 = new Date(2009,4,01);
     
    		Nains f = new Nains();
    		f.add(new rase2Pres("Le grincheux", "plat", d1));
    		f.add(new rase2Pres("Le timbré", "grand", d2));
     
    --> pour la fee c 'est la m^me choses et ca donnerai
    		Fees ar = new Fees();
    		ar.add(new Fee("Carrabosse",d1));
    		ar.add(new Fee("Perchee",d2));
     
     
    	}
    }
    z'en penser quoi?

  2. #2
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par nine Voir le message
    z'en penser quoi?
    ta cigarette, elle était enchantée aussi?


    d'un point de vue java, je note quelques curiosités:

    "extends Fleur"? Et pourquoi pas "nain" ?

    la classe Nain n'a pas de méthode add (ton main va donc pas compiler)

    RaseS2Pre <- mauvais nom, si on respecte la nomenclature java, c'est RasesDePres

    ton compareTo va foirer (Nain n'a pas de champ dateRase)

    c'est quoi çà pour une question?

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    Et tu as deux classes qui s'appellent Rase2Pres, ça va etre pratique.

    Juste pour savoir, t'as essayé de compiler ton code ?

  4. #4
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Faiche Voir le message
    Et tu as deux classes qui s'appellent Rase2Pres, ça va etre pratique.

    Juste pour savoir, t'as essayé de compiler ton code ?
    Ha non, y a Rase2Pres et RaseS2Pres

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    ah désolé, je retire.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    vous me charriez et vous avez raison, m'enfin pas trop !

    ok il y a des bizzareries, pas de fleurs que des nains

    il y a bien une classe main : dans la classe test, j'importerai mes classes apres

    il n'y a pas de add dans la classe nain car je cree ensuite une liste dnas la class RaseS2pres dans laquelle je rajoute mes nains avec la methode add

    aucun respect de la nomenclature je suis d'accord, je ne la connais pas encore, et je t'avoue qu'au rythme ou on nous fais bouffer du java, la nomenclature n'est pas ma priorite...plus tard

    mon compareTo peut foirer, je veux bien, mais j'ai bien declarer dateRase, c'est d'ailleurs le seul attribut de ma classe

    Effectivement je n'ai pas compiler mais je voulais juste savoir si conceptuellement ca tient la route :

    a savoir 1 classe abstraite de laquelle je derive ensuite mes 2 types de nains
    pour celui qui doit se raser j'implemente la class comparable afin de definire une methode compareTo qui me permettra par la suite (une fois integre dans une liste) de faire un tri sur la date

    je comptais faire la meme chose pour la fee que j'integrerai aussi dans la ArrayList
    un sort devrait me donnait par ordre chrono les dates de rasage et de confection de robe

    est-ce bien cela ?

    merci encore

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut une solution
    me voila de retour et toujours avec ma foret enchantee et ses habitants

    ou j'en suis :

    1 classe abstraite : habitants
    3 classes derivees de habitants : nainsRases, nainsBarbus et Fees
    dans les 2 classes nainsRases et Fees j'ai implemente un comparator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static final Comparator DATE_COMPARATOR = new Comparator<nainsRases>() {
     
    		@Override
    		public int compare(nainsRases arg0, nainsRases arg1) {
    			nainsRases p=(nainsRases) arg0;
    			nainsRases q=(nainsRases) arg1;
    			  return p.getDateRasage().compareTo(q.getDateRasage());	  	 
    		}
    	};
    meme chose pour Fees

    pour finir j'ai :

    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
    public class Test {
    	private ArrayList liste1 = new ArrayList();
    	private ArrayList liste2 = new ArrayList();
    	private ArrayList liste3 = new ArrayList();
     
    	public static void main(String[] args) {
    		new Test();
    	}
     
    	public Test() {
    		//pour avoir la liste des nains avec une taille de pieds donnees 
    		this.liste1.add(new nainsBarbus("grincheux", "grand"));
    		this.liste1.add(new nainsBarbus("travailleur", "petit"));
     
    		for (Iterator iter = liste1.iterator(); iter.hasNext();) {
    		    nainsBarbus p   = (nainsBarbus) iter.next();
    		    if (p.getPied()=="grand")
    		    System.out.println("nom = " + p.getNom() + " (pied= " + p. getPied() + ")" );	
     
     
                    //pour avoir la liste ordonnee selon ordre chrono de date de rasage
    		Calendar cal = Calendar.getInstance();
    		Date d = cal.getTime();
    		cal.set(2008, 1, 1);
    		d = cal.getTime();
    		this.liste2.add(new nainsRases("furieux", "grand",d));
                    cal.set(2008, 1, 15);
    		d = cal.getTime();
                    this.liste2.add(new nainsRases("travailleur", "moyen",d));
     
                    Collections.sort(this.liste2, nainsRases.DATE_COMPARATOR);	
     
    		for (Iterator iter = liste2.iterator(); iter.hasNext();) {
    		    nainsRases = (nainsRases) iter.next();
    		    System.out.println("nom = " + a.getNom() + " pied= " + a.getPied() + " date de rasage = " + a.getDateRasage());	
    		}
     
                    //pour avoir la liste ordonne selon ordre chrono de date de confection de robe pour les gentils fees
    		cal.set(2009, 2, 15);
    		d = cal.getTime();
    		this.liste3.add(new Fee( "Charmante",  d));
    		cal.set(2009, 1, 1);
    		d = cal.getTime();
    		this.liste3.add(new Fee( "Aimante",  d));
     
    		Collections.sort(this.liste3, Fee.DATE_COMPARATOR);	
    		for (Iterator iter = liste3.iterator(); iter.hasNext();) {
    			Fee a   = (Fee) iter.next();
    		    System.out.println("nom = " + a.getNom() + " date de taille = " + a.getDateTaille());	
    		}
     
    }
    j'aimerai faire autrement car je ne trouve pas optimale d'utiliser 3 listes
    comment faire pour mettre dans la collection une seule liste , on aurait du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.liste1.add(new nainsBarbus("grincheux", "grand"));
    this.liste1.add(new nainsRases("furieux", "grand",d));
    this.liste1.add(new Fee( "Aimante",  d));
    et une seule boucle avec Object o
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (Iterator iter = liste1.iterator(); iter.hasNext();) {
        Object o =iter.next();
    au lieu de 
        nainsBarbus p   = (nainsBarbus) iter.next();
    j'imagine de tester le type d'objet, savoir si c une fee ou un NR ou un NB et en fonction on appelerait le bon comparator...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    switch (type de mon objet){
    case Fee:...
    case nainsBarbus :...
    case nainsRases :... 
    }
    besoin d'aide, je sais plus ou j'habite!

    EDIT par tchize_: je crois que je me répète, mais ça rend les message lisibles.

  8. #8
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour avoir une seule liste, il suffit que tes nains et tes fées implémentent une interface commune permettant d'obtenir la date qui leur est liée (exemple: public Calendar getNextAction()). Ensuite tu fait un seul comparator qui travaille avec ça. Tu peux même te passer de l'interface en définissant cette méthode comme abstraite dans ta classe Habitant (puisque tout hérite de Habitant)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    pour l'interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import java.util.Calendar;
     
    public class Jardin {
    	interface jardinInterface {
    		public Calendar getNextAction();
    	}
     
    }
    j'ai modifié la classe abstraite habitant pour qu'elle implemente l'interface, par contre je bloque pour la methode generique de comparaison... :

    [/code]
    public abstract class Habitant implements foretInterface {
    ...

    public Calendar getNextAction(){
    if (this instanceof nainsBarbus){
    ?
    }

    if (this instanceof nainsRases){
    ?
    }

    if (this instanceof Fees){
    ?
    }

    }
    }
    [/code]

    au fait merci

  10. #10
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le comparator a juste a comparer les valeur retournées par nextAction. Ta classe abstraite n'a pas besoin d'implémenter la méthode getNextAction, elle peu la laisser abstraite (ce sont les descendant qui l'implémenteront). Et surtout, ta classe abstraite n'a pas besoin de connaitre ses descendants (donc pas de instance of)

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    arf non ca ne peut pas marcher..
    il faudrait 2 types d'action car on veut 2 listes
    liste 1 : tous les nains a grand pied, "grand" etant passe en parametre
    liste 2 : toutes les dates par ordre chrono rasage et taille de robe

    donc si on poursuit dans l'idee de l'interface :
    on rajoute une methode : getLePied(String pied);

    non ?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut pour essayer
    pour avoir la liste des nains avec un pied d'une taille donnee :

    interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class foret{
    	interface foretInterface {
    		public String getNextAction(String pied);
    	}
    }
    dans la classe abstraite habitant implementant l'interface :

    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
     
    public String getNextAction(String pied){
    String s;
    	if (this instanceof nainsBarbus ){
    		nainsBarbus p = ((nainsBarbus)this);
    		if (p.getPied()== pied)
    		s = s + ("nom = " + p.getNom() + " (pied = " + p.getPied() + ")" );	
    		} 
     
    	if (this instanceof nainsRases ){
    		nainsRases p = ((nainsRases)this);
    		if (p.getPied()== pied)
    		s = s + ("nom = " + p.getNom() + " (pied = " + p.getPied() + ")" );	
    		} 
    return s; // j'ai mis ca car java veut absolument un return
    	}
    enfin dan s la classe de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    this.liste1.add(new nainsBarbus("grincheux", "grand"));
    this.liste1.add(new nainsRases("furieux", "grand",d));
    this.liste1.add(new Fee( "Aimante",  d));
     
    System.out.println("Liste des nains a grand pied :");
    System.out.println("------------------------");
    	for (Iterator iter = liste1.iterator(); iter.hasNext();) {
    			Habitant p = (Habitant) iter.next();
    			p.getNextAction("violet");
    	} //for
    ...
    j'ai l'erreur :
    nainRases cannot be cast to java.lang.Comparable

    ???

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    ok

    getNextAction ne peut pas operer 2 fois ...
    une fois pour obtenir liste1 pour les nains
    et une autre fois pour obtenir les actions possibles

    de plus la premiere fois la methode sera de type String
    et l'autre elle sera de type date..

    de plus si je met 2 methodes : getNextAction et getListePied("grnad") par exemple je vais etre oblige de les implementer non?

    du coup c peut etre pas une interface qu'il faut ??
    je sais plus
    mais merci beaucoup
    je crois que j'ai avancé quand même

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

Discussions similaires

  1. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  2. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 21h48
  3. [Débat] Votre avis sur la section "Dev Web"
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 31
    Dernier message: 03/03/2004, 20h55
  4. Votre avis sur le schema Relax NG...
    Par Bj dans le forum Valider
    Réponses: 8
    Dernier message: 19/09/2003, 17h30
  5. Votre avis sur 1 livre SVP
    Par cab dans le forum DirectX
    Réponses: 4
    Dernier message: 17/09/2003, 10h39

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