Exeption en java

master -  
 master -
Bonjour,

je fait ce code mais il ma affiche des errerus svp aide moi à le corriger il y a un probleme d exeption
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication2;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.ArrayList;
import java.lang.IndexOutOfBoundsException;

/**catch (ArrayIndexOutOfBoundsException _)
 *
 * @author marwa
 */
public class heuristique1 {
   // lire un  document
 public static ArrayList<String> lire_doc(String lex){
		ArrayList<String> wordList =new ArrayList<String>();
		try{
			InputStream ips = new FileInputStream (lex);
			InputStreamReader ipsr = new InputStreamReader (ips);
			BufferedReader br = new BufferedReader(ipsr);
			StreamTokenizer st = new StreamTokenizer(br);
			int token;
			while((token=st.nextToken())!=StreamTokenizer.TT_EOF){
				if(token==StreamTokenizer.TT_WORD){
					wordList.add(st.sval);
				}
			}
		}catch(Exception e){
			System.out.println(e.getMessage());
		}
		return wordList;
	}

//lire un fichier line par line ..
    public static  void affiche(String fichier) throws IOException {
		String filePath = "C:\\"+fichier +".txt";
         ArrayList <String> m1 = new ArrayList <String>();
     ArrayList<Integer> m2= new ArrayList<Integer>();
ArrayList<Integer>indice = new ArrayList<Integer>();
try{
// Création du flux bufférisé sur un FileReader, immédiatement suivi par un
// try/finally, ce qui permet de ne fermer le flux QUE s'il le reader
// est correctement instancié (évite les NullPointerException)
BufferedReader buff = new BufferedReader(new FileReader(filePath));

try {
   // svp je veux à chaque fois qu 'il lire la ligne et le couper nombre par nombre et le met dans m1 et le deusieme dans m2
String line;
// Lecture du fichier ligne par ligne. Cette boucle se termine
// quand la méthode retourne la valeur null.
while ((line = buff.readLine()) != null) {
//System.out.println(line);win declaration mta3 m1?
    m1=lire_doc(line);
    
    // <editor-fold defaultstate="collapsed" desc="comment">
    /*indice [0]=1;
for (int i=1;i<=m1.size;i++){
int j =indice[i-1];

indice[i] =indice[i-1]+(2*m1[j])+1;

}*/
  for (int i = 1; i <= indice.size(); i++){
  m2.add(Integer.parseInt(m1.get(i)));

  }

    indice.add(1);


    for (int i = 1; i <= indice.size(); i++) {
        int j = indice.get(i - 1);
       int l = indice.get(i - 1) + (2 * m2.get(j))+ 1;// </editor-fold>

        indice.add(i, l );
//indice[i] =indice[i-1]+(2*tab[j])+1;

}
    //afficher les tableau
for (int h = 0;h<m2.size();h++){
System.out.println(m2.get(h));}
    for (int k = 0;k<indice.size();k++){
System.out.println(indice.get(k));}


    }
} finally {
// dans tous les cas, on ferme nos flux
buff.close();
}
} catch (IOException ioe) {
// erreur de fermeture des flux
System.out.println("Erreur --" + ioe.toString());
}}

    public  static  void main(String[] arg) throws IOException{
        affiche("marwa");
}}


le message de l execution est
5 1 2 6 1 3 1 1 1 2 2 2 6 4 6 3 6 5 2 6 1 1 (Le fichier spécifié est introuvable)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at javaapplication2.heuristique1.affiche(heuristique1.java:82)
at javaapplication2.heuristique1.main(heuristique1.java:106)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

le fichier est sous c:
5 1 2 6 1 3 1 1 1 2 2 2 6 4 6 3 6 5 2 6 1 1
5 1 2 6 2 3 4 6 2 3 6 5 2 6 1 1 3 3 4 2 6 6 6 2 1 1 5 5
5 3 6 5 2 6 1 1 1 2 6 1 3 1 3 5 3 3 5 2 1 2 3 4 6 2
6 3 5 3 3 5 2 1 3 6 5 2 6 1 1 1 2 6 2 1 5 3 4 2 2 6 4 6 3 3 4 2 6 6 6
6 2 3 4 6 2 1 1 2 3 3 4 2 6 6 6 1 2 6 3 6 5 2 6 1 1 2 1 3 4 2
5 1 6 1 2 1 3 4 2 3 3 4 2 6 6 6 3 2 6 5 1 1 6 1 3 1
5 2 3 4 6 2 3 3 4 2 6 6 6 3 6 5 2 6 1 1 1 2 6 2 2 6 4 6
6 1 6 1 2 1 1 5 5 3 6 6 3 6 4 3 1 1 2 3 3 4 2 6 6 6 2 2 6 4 6
6 2 3 4 6 2 3 3 4 2 6 6 6 3 5 3 3 5 2 1 1 6 1 2 2 6 4 6 2 1 3 4 2

4 réponses

Résumé de la discussion

Le code Java lit un fichier ligne par ligne puis appelle lire_doc(line), ce qui ouvre chaque ligne comme un chemin de fichier et provoque une exception de fichier introuvable. Des erreurs d'IndexOutOfBounds apparaissent lorsque des listes comme m2 ou indice sont accédées sans avoir été correctement remplies, reflétant un décalage entre tailles calculées et indices utilisés. Pour corriger, il faut éviter de traiter les lignes comme des chemins et plutôt parser les lignes en tokens, puis construire les structures m1 et m2 en fonction des valeurs lues. En complément, vérifier l'existence du fichier attendu (et son chemin), et tester l'algorithme sur un fichier de test indépendant afin d'isoler les boucles problématiques et prévenir les dépassements.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Joe
     
    Il faut que tu corriges la ligne :

    for (int i = 1; i <= indice.size(); i++)

    par

    for (int i = 1; i <= m1.size(); i++)
    0
    1. master
       
      bonjour je le corriger mais le meme probleme il m affiche à l execution
      Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
      0
  2. matthoffman Messages postés 404 Date d'inscription   Statut Membre Dernière intervention   47
     
    Bonjour,

    Voici ce que tu fais:

    - Tu ouvres un document marwa.txt situe dans C:/, jusqu'ici tout va bien
    - Tu commences donc a le lire ligne par ligne.

    Ce qui est ennuyeux, c'est ce que tu en fait de cette ligne:
    m1=lire_doc(line);


    En effet, si on regarde le code de lire_doc(String lex), on voit ceci:
    InputStream ips = new FileInputStream (lex);


    Ici ce que tu fais tu essayes d'ouvrir le fichier qui se situe a l'emplacement lex.
    Ta premiere ligne de ton fichier etant "5 1 2 6 1 3 1 1 1 2 2 2 6 4 6 3 6 5 2 6 1 1 "
    Ce n'est evidemment pas un chemin correct.

    D'ou l'exception "(Le fichier spécifié est introuvable)"
    0
    1. master
       
      bonjour
      comment je peux le corriger moi je veux lire le fichier ligne par ligne et je veux lire chaque ligne nombre par nombre et met chaque ligne en un tableau
      par exemple t1contient 5 1 2 6 1 3 1 1 1 2 2 2 6 4 6 3 6 5 2 6 1 1
      t2 contient le deusieme ligne
      et merci d avance
      0
  3. matthoffman Messages postés 404 Date d'inscription   Statut Membre Dernière intervention   47
     
    Voici le code

    public class heuristique1 { 
         
        //lire un fichier line par line .. 
        public static  void affiche(String fichier) { 
            String filePath = "C:\\" + fichier + ".txt"; 
            ArrayList<List<String>> matrix = new ArrayList<List<String>>(); 
            try{ 
                // Création du flux bufférisé sur un FileReader, immédiatement suivi par un 
                // try/finally, ce qui permet de ne fermer le flux QUE s'il le reader 
                // est correctement instancié (évite les NullPointerException) 
                BufferedReader buff = new BufferedReader(new FileReader(filePath)); 
    
                try { 
                    String line; 
                    // Lecture du fichier ligne par ligne. Cette boucle se termine 
                    // quand la méthode retourne la valeur null. 
                    while ((line = buff.readLine()) != null) { 
                        String[] nbs = line.split(" "); 
                        matrix.add(Arrays.asList(nbs)); 
                    } 
                     
                    //afficher les tableau 
                    for (List<String> tab : matrix){ 
                        System.out.println(tab); 
                    } 
    
                } finally { 
                    // dans tous les cas, on ferme nos flux 
                    buff.close(); 
                } 
            } catch (IOException ioe) { 
                // erreur de fermeture des flux 
                System.out.println("Erreur --" + ioe.toString()); 
            } 
        } 
    
        public  static  void main(String[] arg) throws IOException{ 
            affiche("marwa"); 
        } 
         
    }
    0
    1. master
       
      merci beaucoup
      vous pouvez m expliquer un peux ce code ??il met le fichier dans un matrice qui s appel matrix ??
      0
    2. master
       
      svp aide moi parce que j ai un mini projet et je doit le rendre
      0
    3. matthoffman Messages postés 404 Date d'inscription   Statut Membre Dernière intervention   47
       
      Alors, matrix, est une liste contenant tes tableaux de nombres.

      De la meme maniere que tu avais fait, on ouvre le fichier voulu, on lit ligne par ligne.
      A chaque ligne qui est lue, on utilise la fonction "split" qui va separer tous les mots trouves dans cette ligne (car dans la fonction split on a precise que le separateur est un espace).
      Cette fonction split renvoie un tableau, ou chaque element sera donc un mot (dans ton cas, chaque element sera un nombre).

      On convertit ensuite ce tableau en liste de maniere a la mettre dans la liste matrix.

      Enfin pour afficher le tableau, il s'agit ici d'un for each, c'est a dire que "pour tous les elements (dans matrix 1 element = 1 tableau) de matrix", on affiche l'element (donc un tableau correspondant a une ligne de ton fichier) sur la sortie standard.

      Voila, en esperant t'avoir eclaire :). S'il y a d'autres choses que tu n'as pas saisi n'hesite pas.
      0
    4. master
       
      merci
      alors le matrice contient de entier (int) ??
      svp si je veux parcourir ce matrice et chaque ligne de ce matrix je veux le transformer en matrice
      par exemple
      le fichier est le suivant :
      5 1 2 6 1 3 1 1 1 2 2 2 6 4 6 3 6 5 2 6 1 1 //line de matrix je le transforme en matrice2
      5 1 2 6 2 3 4 6 2 3 6 5 2 6 1 1 3 3 4 2 6 6 6 2 1 1 5 5 //line de matrix je le transforme en matrice2

      le premier element est 5 alors ce matrice contient 5 colonne le nombre de ligne est fixé 6
      puis le deuxième élément est est 1 alors pour le colonne 1 de matrice2 on à une seul valeur alors le troisieme et le quatrieme element corespond à matrice[2]=6 pour premier colonne

      il nous reste dans la 1er ligne 1 3 1 1 1 2 2 2 6 4 6 3 6 5 2 6 1 1
      1 corespond le nombre d element dans la deusieme colonne puis en pase matrice[3]=1

      il nous reste 1 1 2 2 2 6 4 6 3 6 5 2 6 1 1: 1 est le nombre de elemnt pour le colonne 3 puis matrice[1]=2

      il nous reste 2 2 6 4 6 3 6 5 2 6 1 1 : alors 2 le nombre de element pour le colonne 4 puis matrice[2]=6,matrice[4]=6

      par exemple pour le ligne 1 en obtient le matrice suivant
      le premier ligne :
      1/ - - 2 - 1
      2/ 6 - - 6 6
      3/ - 1 - - -
      4/ - - - 6 -
      5/ - - - - -
      6/ - - - - 5




      svp aide moi j ai un meni projet et je suis bloqué
      0
    5. master
       
      vous avez compris qu est ce que je veux faire svp ??
      0
  4. matthoffman Messages postés 404 Date d'inscription   Statut Membre Dernière intervention   47
     
    Comment tu veux que je le saches ??? C'est ton mini projet, c'est a toi de savoir si c'est correct.

    De plus, tu n'as pas besoin de mettre ta matrice en argument, tu fais comme ceci:
    static void decode(List<String> tab) 
     { 
      String[] new_tab = (String[]) tab.toArray(); 
    
      int n=6; 
      String m=new_tab[0]; 
      int f=  Integer.parseInt(m); 
      int[][] A = new int[n][Integer.parseInt(m)]; 
    
    .... 
    }


    Comme je te l'ai dit (mais tu as juste recopie mon commentaire sans apporter les modifications ...), si tu veux utiliser les chiffres dans le tableau, tu dois utiliser "Integer.parseInt", parce que sinon c'est des String que tu manipules ...
    0
    1. master
       
      il y a des erreur dans le code exeption
      /*
       * To change this template, choose Tools | Templates
       * and open the template in the editor.
       */
      
      package javaapplication2;
      
      import java.io.BufferedReader;
      import java.io.FileReader;
      import java.io.IOException;
      import java.lang.String;
      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      
      /**
       *
       * @author marwa
       */
      public class fichier {
      
          void decode(List<String> tab, String[][] A)
      {
      String[] new_tab = (String[]) tab.toArray();
      
      int n=6;
              String m=new_tab[0];
            int f=  Integer.parseInt(m);
      
      
      
              int indice[]=new int[10];
      indice [0]=1;
      // tableau de indice
      for (int i=1;i<=f;i++){
      int j =indice[i-1];
      indice[i] =indice[i-1]+(2*Integer.parseInt(new_tab[j]))+1;
      
      }
      for (int j=0;j<f;j++){
      System.out.println(indice[j]);
      
      }
      for(int i = 0; i < indice.length; i++){
      for (int k=indice[i]+1;k<indice[i+1];k++)
      {
      System.out.println(new_tab[k] );
      
      }
      
      }
      //pour le matrice qui est extraire de premier tableau
      String[][] A = new String[n][Integer.parseInt(m)];
      for (int j=0;j<n;j++){
      for (int g=indice[j]+1;g<indice[j+1];g=g+2){
      A[g][j]=new_tab[g+1];
      
      }
      
      }
      for (int nc =1;nc< f;nc++)
      {
      
      for (int nl=1;nl<n;nl++)
      {
      //System.out.println(A[nl][nc]);
      }
      }
      
      
          }
           
          //lire un fichier line par line .. 
          public static  void affiche(String fichier) { 
              String filePath = "C:\\" + fichier + ".txt"; 
              ArrayList<List<String>> matrix = new ArrayList<List<String>>(); 
              try{ 
                  // Création du flux bufférisé sur un FileReader, immédiatement suivi par un 
                  // try/finally, ce qui permet de ne fermer le flux QUE s'il le reader 
                  // est correctement instancié (évite les NullPointerException) 
                  BufferedReader buff = new BufferedReader(new FileReader(filePath)); 
      
                  try { 
                      String line; 
                      // Lecture du fichier ligne par ligne. Cette boucle se termine 
                      // quand la méthode retourne la valeur null. 
                      while ((line = buff.readLine()) != null) { 
                          String[] nbs = line.split(" "); 
                          matrix.add(Arrays.asList(nbs)); 
                      } 
                       
                      //afficher les tableau 
                      for (List<String> tab : matrix){ 
                          System.out.println(tab);
                          //appel de la methode decode
      
                          decode( tab,A);
                      } 
      
                  } finally { 
                      // dans tous les cas, on ferme nos flux 
                      buff.close(); 
                  } 
              } catch (IOException ioe) { 
                  // erreur de fermeture des flux 
                  System.out.println("Erreur --" + ioe.toString()); 
              } 
          }
      
      
      // A chaque fois que tu veux recuper un element de new_tab, n'oublie pas de faire ceci:
      // int exemple = Integer.ParseInt(new_tab[0]);
      
      
          public  static  void main(String[] arg) throws IOException{ 
              affiche("marwa");
      
      
      
      }
           
      }
      
      



      voila l erreur
      run:
      [5, 1, 2, 6, 1, 3, 1, 1, 1, 2, 2, 2, 6, 4, 6, 3, 6, 5, 2, 6, 1, 1]
      Exception in thread "main" java.lang.RuntimeException: Uncompilable source code
      at javaapplication2.fichier.affiche(fichier.java:97)
      at javaapplication2.fichier.main(fichier.java:116)
      Java Result: 1
      BUILD SUCCESSFUL (total time: 0 seconds)


      je peux pas atteindre l objectif :'(
      0
    2. master
       
      svp aide moi je peux pas avancer
      0
    3. matthoffman Messages postés 404 Date d'inscription   Statut Membre Dernière intervention   47
       
      Ba oui mais c'est normal !
      Desole mais la vraiment on avance pas et tu fais n'importe quoi.

      Arrete d'etre aussi pressee, et regarde ce que tu fais. Si tu codes sous eclipse ou netbeans (et j'espere que c'est le cas) deja tu saurais que ton code compile pas et pourquoi.

      1) Je t'ai dit d'enlever l'argument A de ta fonction decode, car tu la declares en tant que variable dans ta fonction, donc tu n'as pas a te servir d'un argument supplementaire

      2) Sais tu seulement vraiment ce que tu fais dans ton code et pourquoi ca fait ca ?
      Je rappelle que le but du forum n'est pas qu'on te fasse tes devoirs. Je t'ai donne plein d'indications pour arriver a faire ton mini projet, ce qu'il te reste a faire est seulement d'ordre algorithmique et ca c'est en reflechissant par toi meme que tu trouveras, je ne vais pas t'ecrire ton programme, c'est a toi de le faire.

      Enfin, tu sais on est pas payer a vous aider tu sais, nous aussi on a du travail, donc je ne peux pas te repondre toutes les 2 secondes
      0
    4. master
       
      oui je vous remercie beaucoup
      je sais que je vous fatiguer avec moi mais je ne sais aucun personne qui peux m aider et moi aussi je suis entrain de cherche et essai
      0
    5. master
       
      svp ca presque ca marche
      j ai un problème avec le matrice A que je veux le faire il ne m affiche rien et le tableau de indice je veux l ajouter à la fin la taille de new_tab et je veux que cette traveil ce fait sur chaque ligne de fichier

      voici le code
      /*
       * To change this template, choose Tools | Templates
       * and open the template in the editor.
       */
      
      package javaapplication2;
      
      import java.io.BufferedReader;
      import java.io.FileReader;
      import java.io.IOException;
      import java.lang.String;
      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      
      /**
       *
       * @author marwa
       */
      public class fichier {
      
      public static     void decode(List<String> tab)
      {
      String[] new_tab = (String[]) tab.toArray();
      
      int n=6;
              String m=new_tab[0];
            int f=  Integer.parseInt(m);
      
      
      
              int indice[]=new int[10];
      indice [0]=1;
      // tableau de indice
      for (int i=1;i<=f;i++){
      int j =indice[i-1];
      indice[i] =indice[i-1]+(2*Integer.parseInt(new_tab[j]))+1;
      
      }
      for (int j=0;j<f;j++){
      System.out.println(indice[j]);
      
      }
      for(int i = 0; i < indice.length; i++){
      for (int k=indice[i]+1;k<indice[i+1];k++)
      {
      System.out.println(new_tab[k] );
      
      }
      
      }
      //pour le matrice qui est extraire de premier tableau
      int a=Integer.parseInt(m);
      int[][] A = new int[n][a];
      for (int j=0;j<n;j++){
      for (int g=indice[j]+1;g<indice[j+1];g=g+2){
      A[g][j]=Integer.parseInt(new_tab[g+1]);
      
      }
      
      }
      for (int nc =1;nc< f;nc++)
      {
      
      for (int nl=1;nl<n;nl++)
      {
      System.out.println(A[nl][nc]);
      }
      }
      
      
          }
           
          //lire un fichier line par line .. 
          public static  void affiche(String fichier) { 
              String filePath = "C:\\" + fichier + ".txt"; 
              ArrayList<List<String>> matrix = new ArrayList<List<String>>(); 
              try{ 
                  // Création du flux bufférisé sur un FileReader, immédiatement suivi par un 
                  // try/finally, ce qui permet de ne fermer le flux QUE s'il le reader 
                  // est correctement instancié (évite les NullPointerException) 
                  BufferedReader buff = new BufferedReader(new FileReader(filePath)); 
      
                  try { 
                      String line; 
                      // Lecture du fichier ligne par ligne. Cette boucle se termine 
                      // quand la méthode retourne la valeur null. 
                      while ((line = buff.readLine()) != null) { 
                          String[] nbs = line.split(" "); 
                          matrix.add(Arrays.asList(nbs)); 
                      } 
                       
                      //afficher les tableau 
                      for (List<String> tab : matrix){ 
                          System.out.println(tab);
                          //appel de la methode decode
      
                          decode( tab);
                      } 
      
                  } finally { 
                      // dans tous les cas, on ferme nos flux 
                      buff.close(); 
                  } 
              } catch (IOException ioe) { 
                  // erreur de fermeture des flux 
                  System.out.println("Erreur --" + ioe.toString()); 
              } 
          }
      
      
      // A chaque fois que tu veux recuper un element de new_tab, n'oublie pas de faire ceci:
      // int exemple = Integer.ParseInt(new_tab[0]);
      
      
          public  static  void main(String[] arg) throws IOException{ 
              affiche("marwa");
      
      
      
      }
           
      }
      
      
      0