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 :

StringBuffer contenant des entier et des char!


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Par défaut StringBuffer contenant des entier et des char!
    bonsoir a tous,
    voici le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class temps
    {int heure ,minute , seconde;
     
    String convertToString()
    {String dp=":";
    StringBuffer sb=new StringBuffer();
    sb.append(heure+dp+minute+dp+seconde;
    String forme=sb.toString();
    return(forme);}}
    heure minute et seconde seront saisi au clavier ,lu comme des char convertit en string, puis en entiers.( j'ai defini une fonction keyboard pour effectuer ces conversions)
    ma question est: est ce que c'est fesable de mettre dans StringBuffer des entiers et des chars ensemble??? et comment ca se fait sachant que ma fonction s'execute correctement et me retourne un string de la forme heure:minute:seconde.

    merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Il est tout à fait étonnant que le code que tu nous as donné fonctionne. Il est donc difficile de te répondre, à part des généralités.

    Java est un langage dit typé, c'est à dire que chaque variable a un type définit explicitement. Il y a de nombreuses exceptions, qui ne sont qu'apparentes, qui facilitent l'écriture, mais qui perturbent le débutant.

    Donc si tu mets des int (par exemple) à la place de char, de string ou de choses, il faut que tu gardes à l'esprit que la variable d'origine est un int (et que probablement cela risque de ne pas compiler ou fonctionner à un moment ou à un autre).

    Dans ton problème il me semble qu'il y a quelques-unes de ces facilités d'écriture qui perturbent le débutant.

    Lorsque tu reçois du clavier 123456, il ne s'agit pas d'un nombre au sens java. Au sens java, c'est une série de caractères, conservée dans un String. Cette chose a les propriétés d'un String, non celle d'un entier : tu ne pourras pas faire d'addition dessus, par exemple.

    Pour obtenir un entier à partir d'un String, il faut par exemple utiliser la méthode Integer.parseInt. Pour obtenir un String à partir d'un entier, utiliser la méthode Integer.toString.

    Ainsi tu peux, si tu veux, tout mettre en un StringBuffer, à condition de savoir convertir ce que tu veux y mettre en chaine de caractères ou String.

    Si ces explications ne te permettent pas de comprendre aussi bien que tu le voudrais, redonnes-nous un code correct et utilises la balise code, ce sera plus facile pour nous.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Pour faire plus dans l'esprit de StringBuffer tu devrais coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    StringBuffer sb = new StringBuffer();
    sb.append(heures).append(":").append(minutes).append(":").append(secondes);
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    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 OButterlin
    Pour faire plus dans l'esprit de StringBuffer tu devrais coder ceci :
    Ou plus directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return heures + ":" + minutes + ":" + secondes;
    Ce qui revient strictement au même

    a++

  5. #5
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    Juste pour info, n'y a t-il pas des problèmes de performances à utiliser des strings ? ou bien le JDK est-il capable d'optimiser le code pour avoir des performances comparables entre String et StringBuffer.
    Il me semble que l'utilisation des StringBuffer (et maintenant StringBuilder depuis 1.5) était bcp plus performant que la concaténation de String.
    Est-ce toujours vrai ?

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par xv-mnt
    Juste pour info, n'y a t-il pas des problèmes de performances à utiliser des strings ? ou bien le JDK est-il capable d'optimiser le code pour avoir des performances comparables entre String et StringBuffer.
    Il me semble que l'utilisation des StringBuffer (et maintenant StringBuilder depuis 1.5) était bcp plus performant que la concaténation de String.
    Est-ce toujours vrai ?
    Oui, StringBuilder est plus performant que des concaténation de String dans des boucles par exemple.

    Mais par contre, si tu écris "en ligne":
    ça va être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new StringBuilder().append(machin).append(":").append(truc);
    l'optimisation est faite...

    Attention à ne pas tomber dans une erreur classique lors des append:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Random random = new Random();
    StringBuilder builder = new StringBuilder();
    for(int i = 0; i < 5000; i++) {
        builder.append(random.nextDouble() + ":");
        // il faut mettre builder.append(random.nextDouble().append(":"));
    }
    En effet, ceci sera remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Random random = new Random();
    StringBuilder builder = new StringBuilder();
    for(int i = 0; i < 5000; i++) {
        builder.append(new StringBuilder().append(random.nextDouble().append(":"));
    }

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par adiGuba
    Ou plus directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return heures + ":" + minutes + ":" + secondes;
    Ce qui revient strictement au même
    Tout à fait d'accord

    Avec ta méthode, (il se disait qu') on passe par un nombre de variables intermédiaires String... (donc sur de la grosse concat, plus lent)...
    C'est encore d'actualité ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    Un petit test qui montre que la concaténation de String est TRES mauvaise au niveau temps :
    Résultat :
    Time taken using Strings 17078 milli seconds
    Time taken using StringBuffer : 16 milli seconds
    Time taken using StringBuilder : 0 milli seconds

    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
    package test.performance;
     
    /**
     * This class shows the time taken for creation of String literals and String objects.
     */
     
    public class StringTest1 {
     
        public static void main(String[] args) {
     
            // create String literals
            long startTime = System.currentTimeMillis();
            String s1 = "hello";
     
            for (int i = 0; i < 20000; i++) {
                s1 = s1 + ":" + "hello";
            }
     
            long endTime = System.currentTimeMillis();
            System.out.println("Time taken using Strings " + (endTime - startTime) + " milli seconds");
     
     
            // create StringBuffer objects using 'new' keyword
            long startTime1 = System.currentTimeMillis();
     
            StringBuffer s2 = new StringBuffer();
            for (int i = 0; i < 20000; i++) {
                s2.append(":").append("hello");
            }
     
            long endTime1 = System.currentTimeMillis();
            System.out.println("Time taken using StringBuffer : " + (endTime1 - startTime1) + " milli seconds");
     
     
            // create StringBuffer objects using 'new' keyword
            long startTime2 = System.currentTimeMillis();
     
            StringBuilder s3 = new StringBuilder();
            for (int i = 0; i < 20000; i++) {
                s3.append(":").append("hello");
            }
     
            long endTime2 = System.currentTimeMillis();
            System.out.println("Time taken using StringBuilder : " + (endTime2 - startTime2) + " milli seconds");
     
        }
     
    }

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

Discussions similaires

  1. Comment saisir des entiers et des réels
    Par cbmont dans le forum Débuter
    Réponses: 10
    Dernier message: 12/02/2015, 09h37
  2. taille des pointeurs et des entiers
    Par luckyvae dans le forum C++
    Réponses: 15
    Dernier message: 09/03/2010, 10h18
  3. Réponses: 3
    Dernier message: 13/09/2007, 18h11
  4. Réponses: 3
    Dernier message: 23/01/2007, 08h14
  5. Manipuler des TDateTime comme des entiers?
    Par toufou25 dans le forum C++Builder
    Réponses: 8
    Dernier message: 22/06/2006, 15h52

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