Bonjour,
J'ai des canaris qui se nomme par différents identifiants
1.1212.04
2.1212.04
54.1212.03
N° de bague . Stam . Année
Stam = numéro d'éleveur
La question de grand débutant :
1.1212.04 est un String ou un interger ???
Bonjour,
J'ai des canaris qui se nomme par différents identifiants
1.1212.04
2.1212.04
54.1212.03
N° de bague . Stam . Année
Stam = numéro d'éleveur
La question de grand débutant :
1.1212.04 est un String ou un interger ???
si tu veux les '.' entre les chiffres, ce n'est pas un Integer!
Les String sont plus maniables que les Integer. Par contre, tu peux pas faire d'operations (encore que tu as des methodes pour les convertir en int).
Bref, si tu n'as pas à faire des opérations, ce sont des String!
Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
"La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"
A voir ton format, ce devrait plutôt être un string... (dû aux plusieurs points 1.1212.04)
Mais comme tu as des règles strictes qui définissent ton numéro, je pense que je ferais un objet qui va contenir trois variables : (déclarations)
Et qui va implémenter les méthodes de contrôles, d'écriture, ... tout ce que tu as besoin au niveau de ton identifiant de canari...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //Numéro de la bague private Integer nBague = null; //Numéro de l'éleveur private Integer stam = null; //Année private String annee = null;
A+
Une String toute simple ne semble pas être la bonne solution, parceque il va falloir concaténer les chaînes et les découper... Le mieux c'est d'utiliser un tableau:
String[3]
ou
int[3]
Bonjour,
Pour ma culture, peux tu m'expliquer pourquoi, il ne faut pas concaténer les chaînes ?
En gros la fonctionnalité principale de mon programme est la généalogie.
J'aurai besoin par la suite pourvoir récupérer l'année de l'identifiant pour ouvrir le fichier corespondant
Le pére de 1.1212.04 est 9.1212.02
J'ouvre le fichier 2002.xml pour récupérer les informations sur le pére
La mére de 1.1212.04 est 87.5189.03
J'ouvre le fichier 2003.xml pour récupérer les information sur la mère
Je suis de l'avis de petitjack ...
Il vaut mieux créer son propre objet car comme cela, tu pourras utiliser les différentes élements de l'identifiant sans avoir à toujours parser et découper ta chaine de caractére ...
De plus, tu pourras rajouter des méthodes à ton identifiant afin de faire certaine traitement lui étant destiné, l'objet et ses données devient alors indépendant et tu pourras réutiliser ton composant la ou tu souhaite.
Exemple de code :
Ainsi dans ton exemple, pour récupérer l'année, tu n'a besoin que de utiliser la méthode getAnnee() ...
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 public class IdentifiantCanari { private int bague; private int stam; private int annee; public IdentifiantCanari(int _bague, int _stam, int _annee) { bague=_bague; stam=_stam; annee=_annee; } public int getBague() { return bague; } public int getStam() { return stam; } public int getAnnee() { return annee; } public void setBague(int _bague) { bague=_bague; } public void setStam(int _stam) { stam=_stam; } public void setAnnee(int _annee) { annee=_annee; } public String toString() { return bague+"."+stam+"."+annee; } public int hashCode() { return toString().hashCode(); } public boolean equals(Object o) { if(o!=null && o instanceof IdentifiantCanari && toString().equals(o.toString())) return true; else return false; } }
Alors que si tu fait un String il faut que tu parse ta chaine jusqu'au deuxiéme point, puis tu découpe ta chaine du deuxiéme point à la fin de la chaine, enfin tu converti cette chaine decoupe en entier ... beaucoup de traitement inutile ...
J'ai déjà une class canari....
C'est justement pour modifier celle-ci
Par contre, je ne comprend pas ce code désolé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public int hashCode() { return toString().hashCode(); } public boolean equals(Object o) { if(o!=null && o instanceof IdentifiantCanari && toString().equals(o.toString())) return true; else return false; }
la méthode equals sert à comparer 2 identifiants de canari, si l'identifiant passé en paramétre de la méthode equals identifie le même canari que l'objet dont tu a appellé la méthode, il renverra true.
C'est une surcharge de la méthode equals de java.lang.Object
Idem pour la méthode hashCode() qui permet de stocker ton objet dans une java.util.HashMap ou un java.util.HashSet ...
tu as deja une classe Canari, et dans cette classe tu auras un identifiant du type IdentifiantCanari.
C'est effectivement la meilleure solution dans ton cas, de cette facon tu peux implementer les methode "getPere", "getMere" .... tres facilement!
Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
"La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"
Salut,
La méthode hashCode() (hérité de Object) permet de définir un numéro d'identifiant unique...
Par défaut, chaque instance de ta classe Canari possède un hashCode différent.
En redéfinnissant hashCode() de la sorte, cela te permet de garder le même hashcode pour deux instances du même Canari (même identifiant).
De même, la méthode equals() (également hérité de Object) permet de comparer ton instance de Canari avec un autre Object.
Dans la condition, il verifie respectivement que l'objet n'est pas null, qu'il correspond bien a une instance de IdentifiantCanari et que ses deux identifiant sont egaux...
Par defaut equals() renvoi true seulement si les deux références sont identiques ( this==o ).
Ces deux méthodes servent surtout dans les Collections et les Maps pour comparer les objets...
a++
en gros ça compare si l'identifiant du canari existe pour éviter d'avoir deux fois le même identifiant?
C'est surtout afin de comparer deux instances différentes...Envoyé par pingoui
Ca permet d'utiliser correctement des Set (liste d'éléments uniques) ou encore comme clef dans une Map...
Voici ma class canari:
Il me faut donc créer un class IdentifiantCanari
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 public class Canari { private String nom; private String sexe; private int stam; private int bague; private int year; public Canari() {} public Canari(String nom,String sexe,int stam,int bague, int year) { setNom(nom); setSexe(sexe); setStam(stam); setBague(bague); setYear(year); } public void setNom(String nom) { this.nom=nom;} public void setSexe(String sexe) { this.sexe=sexe;} public void setStam(int stam) { this.stam=stam;} public void setBague(int bague) { this.bague=bague;} public void setYear(int year) { this.year=year;} public String getNom() { return nom;} public String getSexe() { return sexe;} public int getStam() { return stam;} public int getBague() { return bague;} public int getYear() { return year;} }
Puis remplacer les getNom et setNom par la class IdentifiantCanari
Suprprimer les doublons dans la class canari (Stam, Bague et Year)
:
A quoi correspond le Nom ???
Maintenant, c'est l'identifiant
Pour apprendre java, je m'amusais à travailler avec des noms de canari de type "titi" "momo", etc....
Maintenant nom = identifiant !
Ok !
En fait la classe IdentifiantCanari de Debernad correspond à ta classe Canari
Tu n'a plus directement besoin de l'identifiant car il contient des informations redondante avec les trois attributs stam, baque et year.
Mais tu peux toujours le recuperer grâce à la méthode toString().
Par contre tu peux toujours créer un second constructeur avec en paramètre l'identifiant :
que tu utilises comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public Canari(String identifiant) throws Exception { String[] tab = identifiant.split ("\\."); if (tab.length!=3) throw new Exception ("Identifiant incorrect [" + identifiant + "]."); bague= tab[0]; stam= tab[1]; annee= tab[2]; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part Canari c = new Canari ("54.1212.03");
Apparament, ça ne correspond pas au code de Debernad
Tu utilises des Strings[].... de plus creer un nouvel objet.
Ne vaut il pas mieux faire:
:
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 public class Canari { private String identifiant; private String sexe; private int stam; private int bague; private int year; public Canari() {} public Canari(String _identifiant,String _sexe) { identifiant=_identifiant; sexe=_sexe; } public String getSexe() { return sexe;} public int getStam() { return stam;} public int getBague() { return bague;} public int getYear() { return year;} public void setNom(String _nom) { this.nom=_nom;} public void setSexe(String _sexe) { this.sexe=_sexe;} public void setStam(int _stam) { this.stam=_stam;} public void setBague(int _bague) { this.bague=_bague;} public void setYear(int _year) { this.year=_year;} public String getIdentifiant() { return bague+"."+stam+"."+year;} }
Je montrais juste un second constructeur possible pour la classe Canari.Envoyé par pingoui
soit tu crée ton canari avec les infos stam, bague et year en tant que valeur entière :
soit avec le constructeur que je t'ai indiqué tu analyses l'identifiant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Canari c = new Canari (sexe, 14, 2240, 02);
PS: tu peux rajouter le sexe que je n'ai pas mis...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Canari c = new Canari ("14.2240.02");
Le but : Ton objet Canari contient 3 attributs stam, bague et year.
Stocker l'identifiant est une redondance des informations...
Dans le dernier code que tu as posté, lors de la creation de ton objet Canari, ces trois attributs ne sont pas initialisé !!
De plus, ton attribut identifiant ne sert a rien car il n'est utiliser que dans le constructeur. Ta méthode getIdentifiant() re-crée cet identifiant...
Je souhaite appeller mes canaris par leurs identifiants dans le reste du code.
Et souhaite ajouter des canaris de la façon suivante
Et avoir un méthode qui me permet de récupérer l'année de l'identifiant 1.1212.04 par exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Canari unCanari = new Canari(1.1212.04,mâle); add(unCanari);
A vrai dire je suis un peu paumé... trop d'informations nuit à la compréhension....je bosse sur trop de truc en même temps... j'ai besoin de vacances 8) ....même si j'en reviens
Code : Sélectionner tout - Visualiser dans une fenêtre à part Canari.getAnnee(1.1212.04);
C'est mieux comme ça?
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 public class Canari { private String identifiant; private String sexe; private int stam; private int bague; private int year; public Canari() {} public Canari(String _identifiant,String _sexe) { identifiant= bague+"."+stam+"."+year; sexe=_sexe; } public String getSexe() { return sexe;} public int getStam() { return stam;} public int getBague() { return bague;} public int getYear() { return year;} public void setSexe(String _sexe) { this.sexe=_sexe;} public void setStam(int _stam) { this.stam=_stam;} public void setBague(int _bague) { this.bague=_bague;} public void setYear(int _year) { this.year=_year;} }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager