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

Collection et Stream Java Discussion :

allocation progressive d'un tableau


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Par défaut allocation progressive d'un tableau
    bonjour,

    je veux allouer un tableau de StringBuffer progressivement :

    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
     
    public class test {
     
    	public static void main(String[] args) {
     
     
    		StringBuffer [] a;
     
    		a=new StringBuffer[2];
     
     
    		a[0]=new StringBuffer("1");
     
     
    		a=new StringBuffer[2];
    		a[1]=new StringBuffer("2");
     
    		System.out.print(a[0]);
    		System.out.print(a[1]);
    	}
     
    }
    dans cet exemple, j'ai constaté que le résultat qui s'affiche n'est pas celui que je veux. En effet, ici le résultat est : "null2" alors que voulais qu'il soit : "12".
    comment faire pour allouer de maniere progressive sans réallouer par dessus ?

    merci

  2. #2
    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
    Quand tu *refais* a = new stringbuffer[2] tu donnes une nouvelle adresse à a.

    En clair, imagine tu fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int a;
     
    a = 0;
     
    a = 2;
     
    print(a);
    ça va forcément t'afficher 2 et pas 0.

    Ben la c'est pareil, tu n'a rien mis en a[0] donc il sort un null, et sois heureux que ça pete pas.

    Si jamais tu veux qqch qui se réajuste automatiquement, je te conseille de t'orienter vers les conteneurs (voir cours java de ce site)

  3. #3
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Bonjour,
    si la taille du tableau est connue des le debut il ne faut pas le réinitialiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a[0]=new StringBuffer("1");
    a[1]=new StringBuffer("2");

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    Tu ne dois pas repeter la ligne :
    cette ligne crée ton tableau de 2 StringBuffer et initialise les objets de ton tableau à null.
    Donc tu ne dois faire cette initialisation qu'une fois au début de ton programme

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Par défaut
    Citation Envoyé par bigben99
    Tu ne dois pas repeter la ligne :
    cette ligne crée ton tableau de 2 StringBuffer et initialise les objets de ton tableau à null.
    Donc tu ne dois faire cette initialisation qu'une fois au début de ton programme
    oups non mais en fait je me suis trompé dans l'énoncé du code

    c'était :

    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
    public class test {
     
    	public static void main(String[] args) {
     
     
    		StringBuffer [] a;
     
    		a=new StringBuffer[1]; 
     
    		a[0]=new StringBuffer("salut");
     
     
    		a=new StringBuffer[2];
    		a[1]=new StringBuffer("salut2");
     
    		System.out.print(a[0]);
    		System.out.print(a[1]);
    	}
     
    }

    bref je voulais juste savoir comment allouer un bloc d'adresse suplémentaire sans désallouer ce qui précède

  6. #6
    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
    Citation Envoyé par youp_db

    bref je voulais juste savoir comment allouer un bloc d'adresse suplémentaire sans désallouer ce qui précède
    Et bien on t'as répondu : en utilisant des conteneurs.

  7. #7
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    il faut alors ajouter le contenu du premier tableau dans le deuxième

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    StringBuffer[] a;
    StringBuffer[] tempo;
    a=new StringBuffer[1];
    a[0]=new StringBuffer("1");
    tempo = new StringBuffer[2];
    System.arraycopy(a,0,tempo,0,a.length); //copie a dans tempo
    a=tempo; //réaffecte tempo dans a
    a[1]=new StringBuffer("2");
     
    System.out.print(a[0]);
    System.out.print(a[1]);

  8. #8
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    L'effet est exactement le même, tu détruis avec ton new ce qu'il y avait auparavant dans a.
    Je maintiens ce que je disais précédemment avec vector ou ArrayList.
    De même, en consultant la Javadoc, StringBuffer a la méthode append(StringBuffer sb).
    Bref, il me semble que tu fais compliqué alors que Java te mâche tout le boulot.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  9. #9
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Salut

    J'ajouterais que si tu souhaites ajouter des éléments à un tableau sans te soucier à réallouer la mémoire, le package java.util.* contient des classes intéressantes telles Vector ou mieux encore, ArrayList et leur méthode add(Object o).

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. Réponses: 67
    Dernier message: 13/02/2007, 18h08
  2. Réponses: 11
    Dernier message: 20/10/2006, 13h19
  3. Réponses: 13
    Dernier message: 01/10/2006, 00h25
  4. [PRO*C] Allocation dynamique d'un tableau de VARCHAR
    Par NéalZheimer dans le forum Interfaces de programmation
    Réponses: 5
    Dernier message: 07/07/2006, 13h02
  5. Limite Allocation Mémoire d'un tableau d'entier
    Par l9ft b9hind dans le forum C++
    Réponses: 5
    Dernier message: 27/10/2005, 19h29

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