Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1524 connectés 

  FORUM HardWare.fr
  Programmation

  [Java] ArrayOutOfBoundsException

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] ArrayOutOfBoundsException

n°19545
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 20-03-2001 à 15:37:30  profilanswer
 

Hello,
 
J'ai rarement vu une condition de boucle aussi biscornue que la tienne :-) C'est HORRIBLE !!!!!!
 
Essaie ca :-)
 
public void EffaceLogin (String login)  
{  
 int i = 0;  
 while (i < Tab.size())  
 {
  InfosFichiers I = (InfosFichiers)(e.getElementAt(i));  
  String s = I.RetourneLogin ();  
  if (s.compareTo (login) == 0)  
  {  
    Tab.removeElementAt (i);  
  }  
  else i++;  
 }  
}

mood
Publicité
Posté le 20-03-2001 à 15:37:30  profilanswer
 

n°19549
zop
1 world, 1 web, 1 Windows
Posté le 20-03-2001 à 15:50:54  profilanswer
 

darklord22 a écrit a écrit :

Hello,
 
J'ai rarement vu une condition de boucle aussi biscornue que la tienne :-) C'est HORRIBLE !!!!!!
 
Essaie ca :-)
 
public void EffaceLogin (String login)  
{  
 int i = 0;  
 while (i < Tab.size())  
 {
  InfosFichiers I = (InfosFichiers)(e.getElementAt(i));  
  String s = I.RetourneLogin ();  
  if (s.compareTo (login) == 0)  
  {  
    Tab.removeElementAt (i);  
  }  
  else i++;  
 }  
}




 
C'est un banquier, il est prudent :D

n°19582
JBM
Posté le 20-03-2001 à 19:08:39  profilanswer
 

Oui, j'ai rajouté les conditions dans la boucle pour mes nombreux tests mais ça ne change rien. La version initiale ne comportait que le (i < Tab.size ()) ;) J'ai toujours une Exception lorqu'il supprime un élément du Vector. En fait, je me demande si ça ne vient pas de Java lui même puisque cette erreur ne se produit que lorsque le nombre d'éléments du vecteur est assez élevé (plusieurs centaines).

n°19617
TontonVade​r
Fear is my ally...
Posté le 21-03-2001 à 03:47:25  profilanswer
 

JBM a écrit a écrit :

Bonjour à tous,
 
J'ai une ArrayOutOfBoundsException lors de l'exécution de cette méthode :
 
public void EffaceLogin (String login)
 // efface tous les enregistrement pour un utilisateur (lorsqu'il se déconnecte)
 {
 
  int i = 0;
  while ((i >= 0) && (i < Tab.size ()) && (Tab.size () > 0))
  {
    InfosFichiers I = (InfosFichiers)(Tab.get(i));
    String s = I.RetourneLogin ();
    if (s.compareTo (login) == 0)
    {
     Tab.removeElementAt (i);
    }
    else i++;
  }
 }
 
Tab est un Vector.
 
J'ai beau chercher, je ne vois pas ce qui cloche. Ce type d'exception se produit lorsque l'on tente d'accéder à un élément en dehors du vecteur. De plus, la suppression d'un élément par RemoveElementAt est censée décaler tous les éléments suivants d'un cran vers la gauche.
 
Help !




 
L'algo a l'air bon, c'est clair. Le mieux dans ce genre de cas est de d'afficher les valeur de i et de Tab.Size() à chaque occurrence de la boucle. Tu sauras comme ça exactement à kel moment l'exception est lancée.

n°19620
JBM
Posté le 21-03-2001 à 07:58:30  profilanswer
 

Ben avec plusieurs milliers d'éléments dans mon vecteur, j'ai pas fini si j'affiche toutes les valeurs de i et Tab.size () ;)
 
En fait, même si je mets un if ((i>=0) && (i<Tab.size ())) juste avant le Tab.removeElementAt (i), il me sort quand même l'exception :??: Et même plusieurs exceptions à la suite parfois. De plus, il n'indique pas qu'elle se produit dans mon programme mais dans la méthode elementAt () de la classe Vector de Java :??:
Par contre, ça ne gêne en rien l'exécution du programme qui se poursuit normalement et ça supprime bien les éléments du vecteur que je veux supprimer.

n°19772
BifaceMcLe​OD
The HighGlandeur
Posté le 21-03-2001 à 20:10:19  profilanswer
 

Si tu veux connaître les indices en question, tu peux écrire :
while (i < Tab.size () {
    try {
         // Ton corps de boucle
    }
    catch (ArrayOutOfBoundsException e) {
         System.out.println("Taille du vecteur = " + Tab.size() + ", indice courant = " + i);
         e.printStackTrace();
    }
}
 
Sinon, une question bête : tu utilises quel JDK et quelle machine virtuelle ? Et si tu remplaces Vector par ArrayList, rien ne change ? (les 2 classes sont dans le même package ; la seule différence entre les 2, c'est qu'ArrayList n'est pas synchronisée => plus efficace)

n°19774
BifaceMcLe​OD
The HighGlandeur
Posté le 21-03-2001 à 20:24:05  profilanswer
 

JBM a écrit a écrit :

Par contre, ça ne gêne en rien l'exécution du programme qui se poursuit normalement et ça supprime bien les éléments du vecteur que je veux supprimer.




Par contre, ça c'est bizarre... Tu fais un catch (qui ignore l'exception) quelque part que tu ne nous aurait pas écrit ?
 
Parce que normalement, si tu ne fais de catch nulle part, une ArrayOutOfBoundsException devrait te stopper ton programme au moment où l'exception a lieu...

n°19780
JBM
Posté le 21-03-2001 à 21:02:12  profilanswer
 

BifaceMcLeOD a écrit a écrit :

Si tu veux connaître les indices en question, tu peux écrire :
while (i < Tab.size () {
    try {
         // Ton corps de boucle
    }
    catch (ArrayOutOfBoundsException e) {
         System.out.println("Taille du vecteur = " + Tab.size() + ", indice courant = " + i);
         e.printStackTrace();
    }
}
 
Sinon, une question bête : tu utilises quel JDK et quelle machine virtuelle ? Et si tu remplaces Vector par ArrayList, rien ne change ? (les 2 classes sont dans le même package ; la seule différence entre les 2, c'est qu'ArrayList n'est pas synchronisée => plus efficace)




 
Le plus étrange, c'est qu'un try ... catch sur une ArrayOutOfBoundsException dans ma boucle n'est pas pris en compte :??: Par contre, il suffit de mettre en commentaires le Tab.removeElementAt (i); pour ne plus avoir l'exception (mais le tableau ne se vide plus bien sûr) donc c'est bien là qu'est le problème.
 
J'utilise le JDK 1.3 et la machine virtuelle 1.3 (le tout sous Windows NT4 et 2000). En fait, il ne s'agit pas d'un vector mais plus précisément d'un DefaultListModel (que j'utilise dans une JList) mais dont les méthodes sont identiques à celles d'un Vector à quelques détails près.

n°19781
JBM
Posté le 21-03-2001 à 21:04:56  profilanswer
 

BifaceMcLeOD a écrit a écrit :

 
Par contre, ça c'est bizarre... Tu fais un catch (qui ignore l'exception) quelque part que tu ne nous aurait pas écrit ?
 
Parce que normalement, si tu ne fais de catch nulle part, une ArrayOutOfBoundsException devrait te stopper ton programme au moment où l'exception a lieu...




 
Je ne fais nulle part un catch sur cette exception et le programme continue bien son exécution sans erreur ! Et même en faisant un catch, il ne le prend pas en compte :??:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Java] ArrayOutOfBoundsException

 

Sujets relatifs
[java-script] 2 onclick sur une seule image[JAVA] Créer un exe...
HTTP REQUEST en Java[JAVA] Deux questions sur les fichiers JAR
Java[surement Java-script] changer une image à un click
[JAVA-JSP] packages et compilation[java]qn peut m expliker comment ca marche juste par curiosite???
[JAVA] Gestion de la molette ??[JAVA] Evenements - recuperation du type de l'objet...
Plus de sujets relatifs à : [Java] ArrayOutOfBoundsException


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR