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

Langage Java Discussion :

[débutant] String ou int


Sujet :

Langage Java

  1. #1
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut [débutant] String ou int
    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 ???

  2. #2
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    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"

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 85
    Points : 107
    Points
    107
    Par défaut
    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)
    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;
    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...

    A+

  4. #4
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    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]

  5. #5
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    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

  6. #6
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    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 :
    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;
    	}
     
    }
    Ainsi dans ton exemple, pour récupérer l'année, tu n'a besoin que de utiliser la méthode getAnnee() ...
    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 ...

  7. #7
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    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; 
       }

  8. #8
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    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 ...

  9. #9
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    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"

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    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++

  11. #11
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    en gros ça compare si l'identifiant du canari existe pour éviter d'avoir deux fois le même identifiant?

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pingoui
    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...
    Ca permet d'utiliser correctement des Set (liste d'éléments uniques) ou encore comme clef dans une Map...

  13. #13
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Voici ma class canari:

    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;}    
     
    }
    Il me faut donc créer un class IdentifiantCanari
    Puis remplacer les getNom et setNom par la class IdentifiantCanari
    Suprprimer les doublons dans la class canari (Stam, Bague et Year)
    :

  14. #14
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    A quoi correspond le Nom ???

  15. #15
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    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 !

  16. #16
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    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 :
    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];
    }
    que tu utilises comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Canari c = new Canari ("54.1212.03");

  17. #17
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    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;}    
    }
    :

  18. #18
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pingoui
    Apparament, ça ne correspond pas au code de Debernad
    Je montrais juste un second constructeur possible pour la classe Canari.
    soit tu crée ton canari avec les infos stam, bague et year en tant que valeur entière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canari c = new Canari (sexe, 14, 2240, 02);
    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 ("14.2240.02");
    PS: tu peux rajouter le sexe que je n'ai pas mis...

    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...

  19. #19
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Je souhaite appeller mes canaris par leurs identifiants dans le reste du code.

    Et souhaite ajouter des canaris de la façon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Canari unCanari = new Canari(1.1212.04,mâle);
    add(unCanari);
    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
    Canari.getAnnee(1.1212.04);
    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


  20. #20
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    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;}       
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [débutant] convertir string en int
    Par MayOL69bg dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/04/2007, 10h20
  2. Réponses: 4
    Dernier message: 23/11/2005, 17h28
  3. [Débutant] Conversion d'un String en Int
    Par chleuh dans le forum Langage
    Réponses: 9
    Dernier message: 30/12/2004, 13h33
  4. Réponses: 2
    Dernier message: 21/06/2004, 15h55
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2004, 15h00

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