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

avec Java Discussion :

Erreur "java.lang.IndexOutOfBoundsException: Index: 4, Size: 4"


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Par défaut Erreur "java.lang.IndexOutOfBoundsException: Index: 4, Size: 4"
    Bonjour,

    Je suis débutante en Java et je désire faire un programme dont les données d'entrée sont les suivantes :
    1 10 11 12
    2 1474 119 18
    3 1658 152 28
    4 1381 119 20
    5 854 66 10
    6 1299 270 43.58056641
    7 793 77 32
    8 1230 116 0
    9 606 145.6937256 24.72756958
    10 1004 112.4961548 24.64657593
    11 1194 192.3924561 30.37597656
    12 1212 119.6147461 24.68707275
    13 1 1 2 2
    A partir de ce programme, je désire pour deux (ou différents) colonnes ayant la même valeur au niveau de la dernière ligne (ligne 13), récupérer uniquement les colonnes qui ont une la plus forte valeur de la ligne 12 (l'avant dernière ligne). Par exemple pour les colonnes 2 et 3, elles possèdent une même valeur (égale à 1 pour la ligne 13), mais la colonne 2 uniquement sera retenue puisque sa valeur = 1212 (ligne 12) qui est > à celle égale à 119.6147461, etc.... Bien évidemment je supprime les colonnes dont j'en ai pas besoin. Je veux après écrire le résultat dans un fichier texte (je n'ai toujours pas fait cette étape). Mais avant tout selon le code ci-dessous, j'obtiens l'erreur java.lang.IndexOutOfBoundsException: Index: 4, Size: 4 (que je n'arrive pas à résoudre)

    Extrait du résultat obtenu:
    (cont....)
    24.68707275
    1.0
    1.0
    2.0
    2.0
    Les valeurs communes sont 1.0 , 1.0, et la médiane la plus grande est 1212.0
    Same PcGroupe!!
    Elément0 , 10.0 supprimé!
    Elément1 , 1474.0 supprimé!
    Elément2 , 1658.0 supprimé!
    Elément3 , 1381.0 supprimé!
    Elément4 , 854.0 supprimé!
    Elément5 , 1299.0 supprimé!
    Elément6 , 793.0 supprimé!
    Elément7 , 1230.0 supprimé!
    Elément8 , 606.0 supprimé!
    Elément9 , 1004.0 supprimé!
    Elément10 , 1194.0 supprimé!
    Elément11 , 1212.0 supprimé!
    Elément12 , 1.0 supprimé!
    java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
    Voici mon 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    import java.util.*;
    import java.io.*;
     
    public class TriIOnPCGroupe {
     
        public static void main(String[] args) 
           { 
            try { 
                 InputStream ips = new FileInputStream("C:/Users/dgrissa/Desktop/PCGroupe.txt"); 
                 InputStreamReader ipsr = new InputStreamReader(ips); 
                 BufferedReader br = new BufferedReader(ipsr); 
                 String ligne = " ";
                 int nombreDeLignes = 13; // par exemple 
                 int nombreDeColonnes = 4; 
                 List<List<Double>> valeurs = new ArrayList<List<Double>>();    
     
                while ((ligne = br.readLine()) != null) {
                    String[] valeursTextuelles = ligne.split("\t"); 
                    List<Double> valeursLigne = new ArrayList<Double>();
                    if (valeursTextuelles != null)
                        for (String valeurTextuelle : valeursTextuelles)
                            valeursLigne.add(Double.parseDouble(valeurTextuelle));
     
                    valeurs.add(valeursLigne);
                } 
     
                for(List<Double> elem: valeurs)
                 {
                      System.out.println (elem);
                 }
     
                // lire le contenu d'une liste élément par élément
     
                double val  = 0.00;
                double cmp1 = 0.00;
                double cmp2 = 0.00;
                double med1 = 0.00;
                double med2 = 0.00;
     
                for (int i = 0; i < valeurs.size(); i++)
                {
                  for (int j = 1; j < valeurs.get(i).size(); j++) 
                  {
                    if (valeurs.get(i) != null)
                        if (valeurs.get(i).size() > j)
                            val = valeurs.get(i).get(j);
                            System.out.println (val);                   
                  }        
                }
     
                for (int k = 1; k < valeurs.size(); k++){
                    cmp1 = valeurs.get(12).get(k);
                    cmp2 = valeurs.get(12).get(k+1);
                    med1 = valeurs.get(11).get(k);
                    med2 = valeurs.get(11).get(k+1);
                    if(cmp1 == cmp2){
                        if (med1>med2){
                            System.out.println("Les valeurs communes sont " +valeurs.get(12).get(k)+ " , " +valeurs.get(12).get(k+1) +", et la mediane la plus grande est "+med1);
                            System.out.println ("Same PcGroupe!!");
                            //Supprimer la colonne!!
                            for (int n= 0; n < valeurs.size(); n++){
                                valeurs.remove(valeurs.get(n).get(k));
                                System.out.println ("Elément" + n + " , " +valeurs.get(n).get(k) + " supprimé!");
                            }
                        }else System.out.println("La valeur commune est " +valeurs.get(12).get(k)+", et la mediane la plus grande est "+med2);
     
     
                    } //else System.out.println ("Nothing!!");
                }
     
                ips.close();
            } 
       catch (Exception e) { 
       System.out.println(e.toString()); 
       } 
      }
    }
    Quelqu'un saurait-il m'indiquer comment corriger ce problème ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Tout d'abord, merci de reprendre ton message et de mettre les balises CODE autour de ton programme
    avec le bouton # dans la barre d'outils

    à quelle ligne est le message d'erreur ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Par défaut
    voilà pour les modifications demandées Merci pour votre attention!

    J'ai aussi indiqué le résultat que je trouve.

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je suppose que le plantage se situe à l'endroit où tu supprimes ta colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	        			for (int n= 0; n < valeurs.size(); n++){
    	        				valeurs.remove(valeurs.get(n).get(k));
    	        				System.out.println ("Elément" + n + " , " +valeurs.get(n).get(k) + " supprimé!");
    	        			}
    si ton tableau fait 5 éléments, avec int n= 0; n < valeurs.size(); n++
    il va chercher à supprimer les éléments :
    0,1,2,3,4

    oui mais au fur et à mesure de la suppression, le tableau diminue
    et donc quand il cherche à supprimer l'élément n°4 la colonne n'existe plus !!!!

    essaye en partant du plus grand vers le plus petit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (int n= valeurs.size()-1; n ==0; n--)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Par défaut
    Non ça n'a pas marché, il n'a rien supprimé même :\
    J'ai essayé de désactiver cette boucle, et j'obtiens toujours la même réponse

    (cont..)
    1.0
    1.0
    2.0
    2.0
    Les valeurs communes sont 1.0 , 1.0, et la mediane la plus grande est 1212.0
    Same PcGroupe!!
    java.lang.IndexOutOfBoundsException: Index: 4, Size: 4

    Je pense que ça se passe au niveau de la boucle for suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int k = 1; k < valeurs.size(); k++)
    Qu'en pensez-vous?

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    J'en pense qu'avec le numéro de ligne d'erreur on pataugerait moins !
    peux-tu poster la stack-trace ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/01/2015, 22h41
  2. Réponses: 9
    Dernier message: 18/07/2013, 14h08
  3. Réponses: 5
    Dernier message: 07/02/2013, 12h36
  4. java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    Par john_wili dans le forum Struts 1
    Réponses: 3
    Dernier message: 29/03/2009, 09h42
  5. Erreur java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    Par impossibeulman dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 07/08/2008, 15h18

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