Exeption en java
master -
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
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.
-
Il faut que tu corriges la ligne :
for (int i = 1; i <= indice.size(); i++)
par
for (int i = 1; i <= m1.size(); i++) -
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)" -
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"); } }-
-
-
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. -
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é -
-
-
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 ...-
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 :'( -
-
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 -
-
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"); } }
-