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

Java Discussion :

Redef de la methode EnsureCapacity


Sujet :

Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 119
    Points : 98
    Points
    98
    Par défaut Redef de la methode EnsureCapacity
    BOnjour,

    je dois faire une méthode qui vérifie qu'un tableau ait une capacite minimale spécifiée, et si non, rallonger ce tableau pour que l'on puisse y aajouter des éléments.

    Le problème est que je n'y parviens pas, j'ai une arrayOutOfBound Error.

    Voici le 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
    32
    33
    34
    35
    36
    37
    38
    39
     
    public void ensureCapacity(int capaciteMin,Color col){
        // assure que la capacité du tableau représentant les éléments
        // est au moins de capaciteMin
      int ancienneCapacite = rouge.length;
      PointCol [] E;
     
      if (capaciteMin > ancienneCapacite) {
      	if(col == Color.red){
     
      	int nouvelleCapacity = ancienneCapacite * 3 / 2 + 1;
          E = new PointCol [nouvelleCapacity];
     
          System.arraycopy(rouge, 0, E, 0, rouge.length);
     
     
     
          //if(nouvelleCapacity < capaciteMin)
            //   nouvelleCapacity = capaciteMin;
     
          rouge = E;
     
       } else {
     
       	int nouvelleCapacity = ancienneCapacite * 3 / 2 + 1;
          E = new PointCol [nouvelleCapacity];
     
          System.arraycopy(bleu, 0, E, 0, bleu.length);
     
     
     
          //if(nouvelleCapacity < capaciteMin)
            //   nouvelleCapacity = capaciteMin;
     
          bleu = E;
     
       }
      }
     }
    Ne faites pas attention à la vérif de la couleur,
    le principe que je voudrais avoir est le suivant :

    Je crée un nouveau tableau d'un capacité suffisante, je copie tous les elements del'ancien tableau dans le nouveau et ensuite, je fais pointer l'ancien sur le nouveau.

    Pouvez vous me dire ou cela coince t-il?

    Merci

  2. #2
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Points : 317
    Points
    317
    Par défaut
    je me demande quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int nouvelleCapacity = ancienneCapacite * 3 / 2 + 1;
    tu creer un nouveau tableau avec la nouvelle taille mais si la nouvelle taille est 3.5 qu est ce qui se passe? c est pas ca ton ArrayOutOfBoundException par hasard?

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 119
    Points : 98
    Points
    98
    Par défaut
    Ton commentaire est très juste.
    J'ai simplement remplacé la ligne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	int nouvelleCapacity = ancienneCapacite + 2;
    mais toujours la meme erreur

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 119
    Points : 98
    Points
    98
    Par défaut
    ok j'ai trouvé voici la solution :
    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
    public void ensureCapacity(int capaciteMin,Color col){
        // assure que la capacité du tableau représentant les éléments
        // est au moins de capaciteMin
     
      PointCol [] E;
      int ancienneCapacite;
     
      if(col == Color.red){ancienneCapacite = rouge.length;
      } else {ancienneCapacite = bleu.length;}
     
     
      if (capaciteMin > ancienneCapacite) {
      	if(col == Color.red){
     
      	int nouvelleCapacity = ancienneCapacite + 2;
          E = new PointCol [nouvelleCapacity];
     
          System.arraycopy(rouge, 0, E, 0, rouge.length);
     
     
          rouge = E;
     
       } else {
     
       	int nouvelleCapacity = ancienneCapacite + 2;
          E = new PointCol [nouvelleCapacity];
     
          System.arraycopy(bleu, 0, E, 0, bleu.length);
     
     
          bleu = E;
     
       }
      }
     }
    Il y avait un problème d'initialisation de la variable ancienneCapacite qui ne faisait pas la différence si l'element à ajouter etait rouge ou bleu.

    Merci pour votre aide

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

Discussions similaires

  1. [JUnit] Pour tester les methodes d'acces à une sgdb
    Par yanis97 dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 15/04/2004, 15h55
  2. [debutant] [servlets] methode init()
    Par be_on_edge dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 01/03/2004, 15h11
  3. [METHODE] -> Détection de virus ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/02/2004, 17h04
  4. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03
  5. Methode de drcherche a l,interieur de basse de donner texte
    Par philippe V dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 03/12/2002, 10h20

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