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 :

[If] successifs avec et/ou lequel


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut [If] successifs avec et/ou lequel
    Bonjour a tous.
    J'ai une méthode avec plusieurs paramètres à tester. Je dois vérifier s'ils sont nulls et différent d'une chaine vide alors je peux les concaténer. Comment dois-je procéder ???
    Laquelle est la meilleur implémentation de votre point de vue???
    Par exemple

    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
     
     
    private static void MaMethodeConcat(String param1, String param2, String param3)
    {
    String tampon1 = "";
    if(((!("").equals(param1)) && !param1.equals(null)))
    {
    tampon1 += param1;	
    }
    if(((!("").equals(param2)) && !param2.equals(null)))
    {
    tampon1 += param2;	
    }
    if(((!("").equals(param3)) && !param3.equals(null)))
    {
    tampon1 += param3;	
    }
     
    System.out.println(tampon1);
    }
     
    private static void MaMethodeConcatAlternative(String param1, String param2, String param3)
    {
    String tampon1 = "";
    if((((!("").equals(param1)) && !param1.equals(null))  &&((!("").equals(param2)) && (!param2.equals(null)))) 
    && ((!("").equals(param3)) && (!param3.equals(null))))
    {
    tampon1 += param1;	
    tampon1 += param2;
    tampon1 += param3;
    }
    }
     
    public static void main (String[] args)
    {
    .......	
    }
    En vous remerciant à l'avance.

    Cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Les deux ne font pas la même chose ....
    Au passage, pourquoi tester non vide pour concaténer ??
    Et une dernière chose : les conventions de nommage c'est bien !

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    Merci pour les conseils on me fait souvent des reproches sur ces conventions de nommage, aurais tu un site en français qui en parle stp ???
    Je sais qu'il y a une petite erreur sur la méthode MaMethodeConcatAlternative mais en gros elle font la même chose c'est-à-dire concatener.
    Pour répondre à ta question l'obligation que j'ai et de tester à la fois nullite, et la chaine vide, c'est bizarre mais c'est comme ça.
    On m'a parler de l'utilisation de stringbuffer que j'ai oublié de mettre dans le message orginal. Qu'es ce qu'on gagne de plus??? au niveau des performances???

    En vous remerciant à l'avance.

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Euh ... en français non j'ai rien sur les conventions de nommage mais devrait pouvoir être ton ami.
    Une String est en Java "figée", donc en fait quand tu écrit
    où a,b et c sont des String
    il fait tout seul (il me semble)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a = (new StringBuffer(b)).append(c).toString();
    Quand tu utilises toi le StringBuffer c'est plus optimisé ça évite la création de cet objet à chaque fois...

    Au passage j'avais zappé mais pour tester la nullité c'est ==null et non .equals(null) ...

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par smutmutant2003
    Merci pour les conseils on me fait souvent des reproches sur ces conventions de nommage, aurais tu un site en français qui en parle stp ???
    Pensez à consulter les cours et tutoriels Java du site : Guide francophone des conventions de codage pour la programmation en langage Java

    Citation Envoyé par smutmutant2003
    Je sais qu'il y a une petite erreur sur la méthode MaMethodeConcatAlternative mais en gros elle font la même chose c'est-à-dire concatener.
    Mais elle ont deux comportement différent... donc c'est dur de t'aider si on ne sait pas ce qui doit être obtenu en réalité (un exemple de donnée en entrée et le resultat souhaité pourrait être utile).


    Citation Envoyé par smutmutant2003
    On m'a parler de l'utilisation de stringbuffer que j'ai oublié de mettre dans le message orginal.
    Pas la peine d'écrire si gros... on n'est pas aveugle

    Citation Envoyé par smutmutant2003
    Qu'es ce qu'on gagne de plus??? au niveau des performances???
    Comment concatener des chaînes de caractères ?

    Tu évites la création d'objet temporaire, mais dans ton cas étant donné qu'il n'y a que 3 concaténations successive la différence sera imperceptible...

    a++

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Par défaut
    Attention :
    est un bug : si param vaut null, ca déclenche une exception. Il faut faire

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    En fait ma question fondamentale c'est si par exemple on doit tester plusieurs arguments qui ne doivent pas être null et surtout pas égale à une chaine vide.
    L'objectif apres est de concatener les trois paramètres dans une même chaine.

    Fâut-il tester chaque argument séparèment avec son If tout seul, ou on peut tester les trois arguments dans un même If. Laquelle est plus préfèrable???
    Si vous auriez des exemples s'il vous plait.


    Cordialement

  8. #8
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Le switch serait bien s'il fonctionnait avec les chaînes de caractères. Sinon dans ce cas je ne vois pas d'autre solution que de tester les différentes chaînes une à une. Cependant, il est inutile de tester si les chaînes sont vides, car la concaténation sera automatique et n'aura aucune incidence.

  9. #9
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par smutmutant2003
    Fâut-il tester chaque argument séparèment avec son If tout seul, ou on peut tester les trois arguments dans un même If. Laquelle est plus préfèrable???
    Mais cela ne donne pas le même résultat, donc cela dépend de ce que tu veux obtenir !!!


    En supossant que les erreurs signalé dans les précédent message soit corrigé, tu aurais :
    • MaMethodeConcat("a", "", "c") "ac"
    • MaMethodeConcatAlternative("a", "", "c") ""


    On ne peut pas dire qu'un solution est meilleure que l'autre : cela ne fait pas la même chose !

    a++

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Par défaut
    Je te conseille aussi de tester la nullité de ta variable avant de tester si celle-ci est une string vide. Si tu n'inverses pas les tests, en Java par exemple, tu auras un NullPointerException au test de la chaîne vide si ta variable est nulle.

  11. #11
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    @AdiGuba

    Mon objectif est en fait de tester la nullité et la chaine vide,
    puis l'objectif final c'est de concatener, il s'avere que la deuxième fonction que j'ai fait -MaMethodeConcatAlternative- est érronée, donc je la laisse tomber.
    Si je comprend bien la seule façon de parvenir à faire une concaténation en testant au préalable c'est de faire les tests des paramètres les uns apres les autres???

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Par défaut
    Ouaip, ça fait usine à gaz mais quand faut tester les paramètres, tu dois enchaîner les if.

  13. #13
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    Par réference a vos tres aimable conseils j'ai modifié en conséquence c'est-à-dire que j'ai testé la nullité avant la chaine vide voila ce que ça me donne. Reste plus qu'à attendre la validation de notre ami Adiguba puis c'est bon
    Au fait qui peut me dire ce qu'est la différence entre && et 1 seul & je dois avouer que les mets au hasard.
    Je sais ça fait pas tres sérieux, mais c'est peut être le moment ou jamais de corriger ç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
     
    private static void MaMethodeConcat(String param1, String param2, String param3)
    {
    String chaine = "";
    StringBuffer tampon = new StringBuffer("");
     
    if( param1!=null && (!("").equals(param1)))
    {
    tampon.append(param1);	
    }
    if( param2!=null && (!("").equals(param2)))
    {
    tampon.append(param2);	
    }
    if( param3!=null && (!("").equals(param3)))
    {
    tampon.append(param3);	
    }
    chaine = tampon.toString();
    System.out.println(chaine);
    }

  14. #14
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Pourquoi utilises-tu un StringBuffer ? Une simple chaine de caractères suffit, et en plus tu peux utiliser le '+', et pas besoin d'utiliser toString(). Au final, ton programme de début est bon, mis à part les .equals(null)...

  15. #15
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    J'utilise un Stringbuffer parce que le programme à la base est un peu plus complexe qu'il n'y parait, il y a beaucoup plus de paramètres en fait, et ces données viennent d'une base, couplé a une application mettant en jeu des webservices, d'où mon autre méssage dans une autre rubrique sur ce forum.
    Donc des que vous m'avez dit qu'il y a un gain pour les perf. je préfere faire ce que vous m'avez dit.
    Surtout que c'est apparement une application assez complexe, et ils ont pas mal de problèmes de perf. chez ce client.

    Voili voilà

    Cordialement

  16. #16
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Rayndell
    Pourquoi utilises-tu un StringBuffer ?
    StringBuffer permet d'éviter la création d'objet temporaire (comme cela a déjà été dit). Lorsque tu utilises + sur des String tu crées implicitement un StringBuffer et une nouvelle String...

    Mais bon dans ce cas ce n'est pas vraiment méchant d'utiliser des String (mais cela peut être bien plus problématique dans des boucles).

    Citation Envoyé par smutmutant2003
    Au fait qui peut me dire ce qu'est la différence entre && et 1 seul & je dois avouer que les mets au hasard.
    && "ET logique", donc entre deux valeurs booléennes...
    & "ET binaire", qui travaille au niveau des bits...

    Tu devrais trouver cela dans n'importe quel cours de Java...


    Enfin petite remarque : pourquoi tu fais des initialisations inutilement, ceci est amplement suffisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String chaine;
    StringBuffer tampon = new StringBuffer();

    a++

    PS : Pourquoi tu met à chaque fois de la couleur dans tout ton code ??? Cela fait perdre la coloration automatique bien plus lisible qu'un simple texte mono-couleur !

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Au fait qui peut me dire ce qu'est la différence entre && et 1 seul & je dois avouer que les mets au hasard.
    && est un "et logique", entre deux expressions booleennes.
    & est un "et binaire", entre deux valeurs.

    Par exemple pour 2 bytes (representés en binaire) :
    10101010 & 11110000 donne 10100000

    A part pour les booleans, tu auras une erreur de compilation si tu remplaces & par &&.

    && est utilisé dans tout ce qui est expression logique, condition, etc .. bref dans les if, while, ..
    Et c'est bien cet operateur qu'il faut utiliser.

    & est utilisé pour faire des masks, pour tester si un bit est positionné, etc ..

  18. #18
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    Citation Envoyé par adiGuba

    Enfin petite remarque : pourquoi tu fais des initialisations inutilement, ceci est amplement suffisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String chaine;
    StringBuffer tampon = new StringBuffer();
    Ici chez ce client c'est leur façon de travailler, donc je préfere m'y conformer, toutefois je voulais initialiser mes valeurs comme tu as montré, mais c'est leur façon de travailler.



    Citation Envoyé par adiGuba
    PS : Pourquoi tu met à chaque fois de la couleur dans tout ton code ??? Cela fait perdre la coloration automatique bien plus lisible qu'un simple texte mono-couleur !
    Ok message reçu la prochaine fois je ne metrais plus de couleurs.


    Je vous remercie toutes et tous pour votre contribution c'est tres gentil de votre part. S'il y a une chose que je peux faire et que je suis capable n'hesitez pas à me demander.

    Merci les amis.

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Par défaut
    Citation Envoyé par smutmutant2003
    Au fait qui peut me dire ce qu'est la différence entre && et 1 seul & je dois avouer que les mets au hasard.
    Une autre différence est que si tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    expression_booleenne1 && expression_booleenne2
    la seconde expression n'est évaluée que si la première est vraie.

  20. #20
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    Cette dernière remarque est tres interressante, je te remercie.

    Cordialement

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/02/2015, 17h29
  2. Tri successif avec Comparator
    Par adissa357 dans le forum Général Java
    Réponses: 11
    Dernier message: 17/10/2013, 00h02
  3. affichage de graphique successif avec 2 pushbutton
    Par oliv27400 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 15/06/2010, 09h44
  4. [SQL] Tris successifs avec un limit
    Par LestoK dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 03/08/2007, 11h47
  5. [SGBDO] Lequel conseillez-vous avec DotNet ?
    Par ePoX dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 21/03/2006, 21h22

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