Exeption en java

Fermé
master - 13 janv. 2012 à 02:55
 master - 13 janv. 2012 à 19:33
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
A voir également:

4 réponses

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
bonjour je le corriger mais le meme probleme il m affiche à l execution
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
0
matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
13 janv. 2012 à 10:20
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
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
matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
Modifié par matthoffman le 13/01/2012 à 12:11
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
merci beaucoup
vous pouvez m expliquer un peux ce code ??il met le fichier dans un matrice qui s appel matrix ??
0
svp aide moi parce que j ai un mini projet et je doit le rendre
0
matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
13 janv. 2012 à 13:02
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
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
vous avez compris qu est ce que je veux faire svp ??
0
matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
Modifié par matthoffman le 13/01/2012 à 15:23
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
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
svp aide moi je peux pas avancer
0
matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
13 janv. 2012 à 15:54
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
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
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