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 :

Erreur causée par une boucle ?


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Erreur causée par une boucle ?
    bonjour, j'ai un souci avec un mini-projet ( qu eje dois rendre ce soir).
    il s'agit de convertir un tableau de char en tableau de string; j'ai ecris le code mais je n'arrive pa à ecrire le dernier mot du tableau ( !!!)
    peu-être ai-je trop le nez collé dessus mais ça urge
    si quelqu'un peut regarder. Merci d'avance.
    lucck

    voici le code :

    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
    public class Projet_2_TabCharVersTabString {
    static int cmptNbMot(char []t){
           int NbMot=0;
           for(int i =0; i<t.length; i++){
                if((t[i]== ' ')&&(t[i]+1)!= ' '){
                   NbMot=NbMot+1;
                }
               // else if ( t[i]!=' '){
                 //i++;
          }
          return( NbMot+1);
    }
    public static void main ( String args []){
        char[] tab1 ={'b','o','n','j','o','u','r',' ','c','e','c','i',' ','e','s','t',' ','u','n',' ','t','a','b','l','e','a','u'};
        String s= " ";
        char a = ' ';
         // affichage du tableau de caractères tab1 :
        for(int j=0; j<tab1.length; j++){
            Terminal.ecrireString(" "+tab1[j]);
        }
        Terminal.sautDeLigne();
        Terminal.ecrireStringln("la longueur du tableau de char est : " + tab1.length);
        Terminal.ecrireStringln(" le nb de mot est : " +cmptNbMot(tab1));
        String [] tab3 =new String [cmptNbMot(tab1)];
        int j=0;
        for(int i=1; i<cmptNbMot(tab1); i++){
           while(tab1[j]!=a && j <tab1.length){
                 s= s+ tab1[j];
                 tab3[i]=s;
                 j++;
           }
           Terminal.ecrireStringln(" glurp "+ i + tab3[i]);
           s=" ";
           while ( tab1[j]==a && j<tab1.length){
                j++;
           }
       }
    }
    }
    Résultat de la compil : avec i =1, das la boucle for :

    run-single:
    b o n j o u r c e c i e s t u n t a b l e a u
    la longueur du tableau de char est : 27
    le nb de mot est : 5
    glurp 1 bonjour
    glurp 2 ceci
    glurp 3 est
    glurp 4 un
    BUILD SUCCESSFUL (total time: 0 seconds)

    Il me manqu edonc soit un dernier tour soit une case dans le tableau tab3 pour qu ele mot "tableau " s'affiche...


    si je fais i = 0 , pour rajouter un tour, ça ne passe pas :

    run-single:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 27
    b o n j o u r c e c i e s t u n t a b l e a u
    la longueur du tableau de char est : 27
    le nb de mot est : 5
    at Nfa001_Bis.Projet_2_TabCharVersTabString.main(Projet_2_TabCharVersTabString.java:28)
    glurp 0 bonjour
    glurp 1 ceci
    glurp 2 est
    glurp 3 un
    Java Result: 1
    BUILD SUCCESSFUL (

  2. #2
    Membre régulier Avatar de taha1
    Femme Profil pro
    débutantE ^ ^
    Inscrit en
    Mai 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : débutantE ^ ^

    Informations forums :
    Inscription : Mai 2009
    Messages : 106
    Points : 105
    Points
    105
    Par défaut
    Salut
    je crois que ton problème vient de
    while(tab1[j]!=a && j <tab1.length){
    sachant que ton tableau de caractère contient tab1 ={'b','o','n','j','o','u','r',' ','c','e','c','i',' ','e','s','t',' ','u','n',' ','t','a','b','l','e','a','u'};
    donc du coup tu sort de ta boucle sans terminer la construction de ta dernière chaîne de caractère "tableau"

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Inverse les condition en mettant :
    if(j<tab1.length && tab[j]!= ' '). (et part de 0)

    Sinon deux trois choses :
    Utilises les balises codes
    Stock la valeur retournée par cmptNbMot une bonne fois pour toute a lieu de la recalculer à chaque fois.
    La fonction cmptNbMot plantera si ton tableau se termine par plus d'un ' '.
    Essaye d'apprendre les conventions de codage et données des noms clair à tes variables.

    Et pour taha1, il faut bien faire la différence entre variable et valeur

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Merci à tous les deux.
    J'ai inversé les conditions et ...ça va mieux.

    ok je vien s d evois ce que sont les balises codes

    "Stock la valeur retournée par cmptNbMot une bonne fois pour toute a lieu de la recalculer à chaque fois." ...je le fais en principe, mais dimanche j'ai fait une stupide erreur relative au stockage d'un return et j'ai passé 6 heures ( oui!!! ) pour la trouver ...à 3 jours de mon examen .... je suis encore un peu sous le coup.

    "Essaye d'apprendre les conventions de codage " ... par exemple ?

    et données des noms clair à tes variables. ok, (en principe , ce code devait être lu uniquement par mon prof...)

    Autre question / problème :

    J'ai testé mon code avec d'autes mots = ça passe pas à la compil; je pense que ça vient de ma methode ( cmptNbMot) [ qui signifie : compteur du nombre de mot ]
    dans un des exemples donnée dans l'énoncé il est ecrit que , l'on peut avoir dans un mot un point d'exclamation; donc, j'en déduis qu'on peut aussi avoir d'autres caractères ( point d'interrog, ect ) ; donc, cela me pose pb pour tester le char ; car de plus, il peut y avoir plkusieurs espaces à la suite entre 2 mots, et, bien sur, ces espaces ne comptent pas pour un mot.

    en fait , je n'arrive pas à trouver l'algorithme juste pour comlpter le nb de mot.
    ( le code en java est une autre étape ).
    pouvez-vous me donner une piste de reflexion ou une methodologie ?

    Merci encore pour votre précédente aide.
    et Merci d'avance si vous pouvez m'aider encore

    ps : je dois rendre ce travail ce soir à minuit max et j'ai l'examen de cette ue ce soir de 18 à 20 h

  5. #5
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par lucckyly2 Voir le message
    Autre question / problème :

    J'ai testé mon code avec d'autes mots = ça passe pas à la compil; je pense que ça vient de ma methode ( cmptNbMot) [ qui signifie : compteur du nombre de mot ]
    dans un des exemples donnée dans l'énoncé il est ecrit que , l'on peut avoir dans un mot un point d'exclamation; donc, j'en déduis qu'on peut aussi avoir d'autres caractères ( point d'interrog, ect ) ; donc, cela me pose pb pour tester le char ; car de plus, il peut y avoir plkusieurs espaces à la suite entre 2 mots, et, bien sur, ces espaces ne comptent pas pour un mot.

    en fait , je n'arrive pas à trouver l'algorithme juste pour compter le nb de mot.
    ( le code en java est une autre étape ).
    pouvez-vous me donner une piste de reflexion ou une methodologie ?
    Le plus simple je pense est d'utiliser une liste de caractères acceptables pour séparer les mots. Et comme ça tu testes tous ces caractères à la place du simple caractère espace pour savoir si tu changes de mot.

    Autre idée, tu choisis un caractère de séparation. Tu remplaces dans la chaine tous les caractères utilisés pour séparer des mots par celui-ci. Et enfin tu split cette chaine.

    Par exemple

    ton caractère ";"
    liste de caractères utilisable ";" "," "." " " ...
    Pour chaque caractère utilisable tu le remplace par ";"
    et enfin tu découpes ta chaine avec ce caratères. Tu n'as plus ensuite qu'à compter les élements non vides ...

    ce qui donnerait
    la chaine = "a,. bc!!!!!def"
    la chaine transformée : "a;;;bc;;;;;def"
    en splitant sur ";", ça te donne un tableau avec 3 éléments non vides ...





    Tu dois avoir moyen aussi d'utiliser des expressions régulières pour "nettoyer" ta chaine, mais bon ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

Discussions similaires

  1. [XL-2007] Erreur de calcul causée par une erreur d'écriture
    Par glpx65 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 26/09/2014, 14h14
  2. [Conception] Faire une somme de valeurs définies par une boucle
    Par fixbraun dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/09/2006, 23h46
  3. [Timer] timer bloqué par une boucle for?
    Par Jidefix dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 18/09/2006, 17h12
  4. Message d'erreur à cause d'une session : inconnu
    Par michka999 dans le forum Langage
    Réponses: 17
    Dernier message: 24/08/2006, 12h39
  5. [debutant][servlet]erreur causée par une listBox
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/03/2004, 10h53

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