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

Langage Java Discussion :

[DEBUTANT] java.lang.ArrayIndexOutOfBoundsException introuvable


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut [DEBUTANT] java.lang.ArrayIndexOutOfBoundsException introuvable
    Bonjour à tous,

    Dans le cadre d'un travail scolaire (je ne vous le cache pas ), je dois réaliser un programme qui "normalise" une suite de caractères entrée par l'utilisateur. Par exemple :

    "Ceci est la ligne entrée par l'utilisateur" doit devenir :

    "Ceci est la ligne
    entrée par l'utili-
    sateur."

    J'ai donc créé une méthode format qui va "nettoyer" le tableau (je précise qu'on nous interdit de travailler avec les String et que celui ci est donc converti en un tableau de caractères). Cette méthode appelle donc la méthode cleanSpaces qui enlève les (possibles) espaces inutiles au début de la ligne entrée par l'utilisateur et qui s'arrange pour n'avoir plus qu'un espace entre chaque mot.
    Par exemple:

    "___Ceci____est_une__pomme." (les _ sont des espaces) doit devenir :
    "Ceci_est_une_pomme."

    Voici donc ma méthode :

    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
    /**
            Méthode qui nettoye le texte pour n'avoir qu'un espace entre chaque mot. Elle retire également tous les
            espaces au début du tableau.
    **/	 
     
     
    public static char[] cleanSpaces(char text[])
    {
    	int i = 0;
    	int x = 0;
    	char[] text2 = new char[text.length];
     
    	while (text[i] == ' ')
    	{
    		i++;
    	}
    	while (i<text.length)
    	{
    		if(text[i] != ' ')
    		{
    			text2[x]=text[i];
    			i++;
    			x++;
    		}
    		else if(text[i]==' ');
    		{
    			text2[x]=text[i];
    			i++;
    			x++;
    			while(text[i] == ' ')
    			{
    				i++;
    			}
    		}
    	}
    	text=text2;
    	return text;
    }
    Mais lors de la compilation :

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 36
    at tp3.cleanSpaces(tp3.java:41)
    at tp3.format(tp3.java:9)
    at tp3.main(tp3.java:84)

    J'en déduis donc (d'après les explications de mes assistants) que l'indice i qui avance dans le tableau avance à un moment ou un autre "trop loin" et atteint un endroit du tableau qui n'existe pas...
    Malheureusement, j'ai beau chercher, je ne trouve pas l'erreur.

    D'avance merci pour votre aide et vos conseils,

    Mithandir

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    C'est probablement dans cette boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(text[i] == ' ')
    {
         i++;
    }
    Tu avance jusqu'a trouver un caractère vide mais si il n'y en a pas ça doit planter.
    Tu devrait faire plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(text[i] == ' ' && i<text.length)
    {
         i++;
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    En effet, mais cela ne corrige que le cas ou il n'y a que des espaces.
    Je n'ai pas précisé que je teste directement le programme, voici sa version complète :
    Le problème est donc toujours présent...

    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
    import tp3.*;
    import ordinateur.*;
     
    class tp3
    {
    public static void format(char[] text, int width, final Hyphenation table)
    {
    	Line.clean(text);
    	cleanSpaces(text);
    	//endSpaces(text);
    	char[][] finaltab = new char[1][width];
    	Display.print(text);
    }
     
    /**
            Méthode qui nettoye le texte pour n'avoir qu'un espace entre chaque mot. Elle retire également tous les
            espaces au début du tableau.
    **/	 
     
    public static char[] cleanSpaces(char text[])
    {
    	int i = 0;
    	int x = 0;
    	char[] text2 = new char[text.length];
     
    	while (text[i] == ' ' && i<text.length)
    	{
    		i++;
    	}
    	while (i<text.length)
    	{
    		if(text[i] != ' ')
    		{
    			text2[x]=text[i];
    			i++;
    			x++;
    		}
    		else if(text[i]==' ');
    		{
    			text2[x]=text[i];
    			i++;
    			x++;
    			while(text[i] == ' ')
    			{
    				i++;
    			}
    		}
    	}
    	text=text2;
    	return text;
    }
     
    /**
            Méthode qui nettoye les espaces qui pourraient se trouver à la fin du string.
    **/
     
     
     
    /**
            Méthode main.
    **/
     
    public static void main (String[] args)
    {
    	Hyphenation table = new Hyphenation();
    	ecran.afficher("Veuillez introduire le paragraphe que vous souhaitez formater:");
     	String s = clavier.lireUnString();			
    	char[] text = Line.toCharArray(s);         
     	ecran.afficher("Veuillez entrer la largeur souhaitee pour le formatage:");
       int width = clavier.lireUnInt();
       format(text, width, table);
     
    }
    }

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Il faut vérifier dans ton algorithme à chaque fois que tu accèdes à un element de ton tableau si tu depasses sa capacité un nom.
    C'est vrai dans la condition de la boucle while, et la condition a ajouté est plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(i<text.length) && text[i] == ' ' )
    {
         i++;
    }
    C'est vrai aussi par exemple ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    else if(text[i]==' ');
    		{
    			text2[x]=text[i];
    			i++;
    			x++;
    			while(text[i] == ' ')
    			{
    				i++;
    			}
    		}
    Il faut ajouter a chaque fois les tests pour savoir si tu atteinds la limite du tableau.

    Je te conseille également d'utiliser un debugger. Ca permet de comprendre/verifier comment se comporte ton algorithme, et de comprendre les erreurs plus facilement et rapidement

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Merci à tous pour vos réponses rapide. J'ai finalement trouvé une solution!

    Je vous dis certainement à bientot car je pense que je ne suis pas au bout de mes peines

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/12/2009, 10h56
  2. java.lang.ArrayIndexOutOfBoundsException : 0
    Par kaiser59 dans le forum Général Java
    Réponses: 4
    Dernier message: 12/09/2009, 22h23
  3. Erreur java lang.ArrayIndexOutOfBoundsException
    Par lerorodu51 dans le forum NetBeans
    Réponses: 8
    Dernier message: 04/06/2009, 19h17
  4. [XSLT] java.lang.ArrayIndexOutOfBoundsException sur Transformation XSLT
    Par SONY30 dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 11/12/2006, 16h59
  5. Réponses: 4
    Dernier message: 30/07/2006, 14h38

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