Java.lang.ArrayIndexOutOfBoundsException: 5

Résolu/Fermé
leanjocker Messages postés 154 Date d'inscription jeudi 18 février 2010 Statut Membre Dernière intervention 8 août 2014 - 15 févr. 2012 à 14:07
leanjocker Messages postés 154 Date d'inscription jeudi 18 février 2010 Statut Membre Dernière intervention 8 août 2014 - 15 févr. 2012 à 14:26
Bonjour,
voici mon programme : java avec netbeans
il doit lire un fichier csv et remplir un tableau d'objet(où un objet correspond à un ensemble d'information lu dans une ligne. pour ensuite être traité.
voici mon programme :
public class Fenetre extends javax.swing.JFrame {

PrintWriter sortie;
BufferedReader entree;
Cfiche[] tabfiche = new Cfiche[40];
String fichier = "basededonnees.csv"; //nom du fichier généré
int idx; //index du tableau

public Fenetre() throws IOException {
setTitle("Mise à jour des informations");
initComponents();
idx = 0;


File f = new File(fichier);

if ( f.exists() ){ //test l'existance d'un fichier de données
//si il existe alors on parcours le fichier
String ligne;// une ligne du fichier lu recuperer par le buffer
String[] decoupe; // tableau contenant les parties de la ligne lu

entree = new BufferedReader (new FileReader(fichier));

do{
Cfiche elt = null;
ligne = entree.readLine();// lit une ligne du fichier
if(ligne != null){
decoupe = ligne.split(";");//decoupe chaque cellule du fichier
elt = new Cfiche(decoupe[0],decoupe[1],decoupe[2],decoupe[3],decoupe[4],decoupe[5]);
System.out.println(decoupe[0]);
System.out.println(decoupe[1]);
System.out.println(decoupe[2]);
System.out.println(decoupe[3]);
System.out.println(decoupe[4]);
System.out.println(decoupe[5]);
tabfiche[idx] = elt;
System.out.println(tabfiche[idx].categorie);
idx= idx + 1;
}
}
while(ligne != null);
}
else{ // si le fichier n'existe pas on le crée
sortie = new PrintWriter (new FileWriter (fichier)) ; // créer un fichier csv
sortie.println("categorie;sous categorie;infos principales;liens principaux;infos secondaires;liens secondaires"); //initialise l'en tête des colonnes
}
}

class Cfiche {
public String categorie,souscategorie, txtprincipale,liensprincipaux,txtsecondaires,lienssecondaires;

public Cfiche(){}
public Cfiche(String cat,String souscat,String txtp,String lp, String txts, String ls){
categorie = cat;
souscategorie = souscat;
txtprincipale =txtp;
liensprincipaux = lp;
txtsecondaires = txts;
lienssecondaires = ls;
}
}

a la compilation j'ai l'erreur suivante java.lang.ArrayIndexOutOfBoundsException: 5
l'erreur provient du tableau mais je ne sais pas pourquoi
<config>Windows 7 / Safari 535.11</config>

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 15/02/2012 à 14:18
Ce n'est pas à la compilation que tu as ce genre d'erreur, mais à l'exécution !

Lorsque tu utilises decoupe[n] il faut être sûr d'avoir n<decoupe.length, or un split peut très bien te renvoyer moins de résultats que les 6 que tu attends.
Pour mieux suivre l'erreur tu peux par exemple faire ceci :

decoupe = ligne.split(";");
if (decoupe.length!=6)
    System.out.printf("%d\t%s\n",decoupe.length,ligne);
La confiance n'exclut pas le contrôle
0
leanjocker Messages postés 154 Date d'inscription jeudi 18 février 2010 Statut Membre Dernière intervention 8 août 2014 71
15 févr. 2012 à 14:26
ah oui il m'en retourne 5 sur la dernière ligne merci de l'aide je vais essayé de trouver un moyen d'arranger sa merci
0