Exception

Résolu/Fermé
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015 - 4 déc. 2014 à 23:32
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015 - 6 déc. 2014 à 12:36
Bonjour,

voici a l'exécution de mon code j'ai le message suivant:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 46
at Prog.main(Prog.java:18)
j'arrive pas a trouver ou est l'erreur quelqu'un pourrais peut être m'aider.
merci d'avance.
et voici mon code :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.*;
import java.net.URL;

public class Zellal
{
public static void main(String[] args) throws IOException
{
//URL url = new URL("https://www.vidal.fr/medicaments/substances/liste-c.html");// Ou bien...
String urlstart="https://www.vidal.fr/medicaments/substances/liste-c.html";
char taburl[],c=' '; int i,j=0;
char tabchar[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
taburl=urlstart.toCharArray();//transformer la chaine en tableau
int taille= taburl.length; //retrouver la taille du tableau
for (i=taille;i!=0 && taburl[i]!='.';i--);// boucle vide
if (i==0) System.out.println("erreur dans le lien");
else c=taburl[i-1]; //on recupere le caractere qui est avant le point

//spécifier l'URL (plus tard), elle sera insérée dans une boîte de saisie de type InputDialog
PrintWriter ecrire = new PrintWriter("subst");
PrintWriter ecrire1 = new PrintWriter("compr");
ecrire.write("\uFEFF");
//PrintWriter ecrire =new PrintWriter (new FileWriter ("subst.dic")) ;//FileWriter n'accepte pas un 2ème argument pour spécifier l'encodage
URL url = new URL(urlstart);
//instancier un objet de la classe URL
System.out.println("URL à aspirer ==>"+url);
//imprimer cet objet
while(j<25)
{ if (taburl[i-1]!=tabchar[j])
{taburl[i-1]=tabchar[j];//on fait varier la lettre avant le point
urlstart=new String(taburl);
url = new URL(urlstart);

BufferedReader lire = new BufferedReader(new InputStreamReader(url.openStream()));

do
//faire ce qui suit
{
String line = lire.readLine();
System.out.println(line);
if(line == null)
{
break;
}
ecrire.write(line);
ecrire.write(System.getProperty("line.separator"));
//générer dans sauts de ligne
} while(true); j++;}
else continue;//si taburl[i-1]==tabchar[j]
}
//tant que c'est vrai (true)
ecrire.close();
//fermer le flux d'écriture
}
}





2 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
4 déc. 2014 à 23:40
Bonjour,

Ton erreur est là :

int taille= taburl.length; //retrouver la taille du tableau 
for (i=taille;i!=0 && taburl[i]!='.';i--);// boucle vide

i
est initialisé avec
taille
qui vaut
taburl.length
(46 dans ton cas), or les indices d'un tableau commencent à 0, donc le dernier indice est
taburl.length-1
.
Donc quand tu fais
taburl[i]
ça plante parce que i est trop grand... d'où l'exception.

Il faudrait plutôt faire
for (i=taille-1; i>=0 && taburl[i]!='.'; i--);

Remarque : j'ai mis
i>=0
pour la même raison : les indices commencent à 0...
1
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015
6 déc. 2014 à 12:36
merci beaucoup ça marche maintenant.
0