L'index se trouve en dehors des limites du tableau (débutant)

Messages postés
3
Date d'inscription
lundi 31 octobre 2011
Statut
Membre
Dernière intervention
13 janvier 2014
- - Dernière réponse : Whismeril
Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 août 2019
- 22 nov. 2011 à 19:18
Bonjour,

J'ai un TP à rendre, mais j'ai une erreur que je n'arrive vraiment pas à résoudre.
Voici l'énoncé :

Initialiser un tableau de 5 mots au moment de la déclaration. Permettre la saisie d’une suite de mots et afficher un message indiquant si le mot saisi se trouve ou non dans le tableau. La saisie de la suite de mots se termine avec le mot FIN.
La recherche du mot saisi dans le tableau doit se faire dans une fonction qui retourne le message à afficher. Utiliser la concaténation de chaines de caractères pour introduire le mot recherché dans le message à afficher.


Je lance le programme, mon texte s'affiche normalement, mais lorsque je réponds et appuie sur entrée, j'ai un problème "L'index se trouve en dehors des limites du tableau".

Voici mon code :

namespace LES_ATELIERS4
{
    class tpa4
    {
        static void Main(string[] args)
        {

            string message;
            string[] tbMots = new string[5] { "Pomme", "Poire", "Carotte", "Banane", "Tomate" };
            string mots;

            Console.WriteLine("Entrez un mot à rechercher ou FIN pour terminer : ");
            mots = Console.ReadLine();
            while (mots != "FIN")
            {
               message = motsValide(ref mots, tbMots);
            

            Console.WriteLine(message);
            }
       }

        static string motsValide(ref string mots, string[] tbMots)
        {
            int cpt = 0;
            string messg;
            bool trouver = false;
            while (cpt <5 || trouver == false)
            {
               
                    if (mots == tbMots[cpt])
                    {
                       trouver = true;
                    }
                    else
                    {
                        trouver = false;

                    }
                    cpt ++;                  
                
                
            }
            if (trouver == true)
                messg = " Le mot '" + mots + "' existe dans le tableau.";
            else
                messg = " Le mot '" + mots + "' n'existe pas dans le tableau.";

            return (messg);


        }



    }

}


Si vous avez une solution je suis prenante ! Merci
Afficher la suite 

7 réponses

Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 août 2019
298
0
Merci
Bonjour

while (cpt <5 || trouver == false)
            {
               
                    if (mots == tbMots[cpt])
                    {
                       trouver = true;
                    }
                    else
                    {
                        trouver = false;

                    }
                    cpt ++;                  
                
                
            }

tu devrais utiliser l'instruction for, pour sortir de la boucle si tu trouve le mot utilise break.

Il me semble que tu ne réponds pas à l'énoncé:
La saisie de la suite de mots se termine avec le mot FIN.

Dans ton code, le tableau est initié et rempli par le code et non par l'opérateur.


Whismeril
Commenter la réponse de Whismeril
Messages postés
3
Date d'inscription
lundi 31 octobre 2011
Statut
Membre
Dernière intervention
13 janvier 2014
0
Merci
Déjà merci pour la réponse.

J'avais déjà essayer avec un for mais ma prof a dit que pour ce cas ce n'était pas approprié ...
Et que mon problème serait que je ne sort pas de la boucle while, et qu'il faut que je fasse varier "mots". Mais cela ne m'as pas plus avancé.
Pour le reste en ce qui concerne l'énoncé et l'initialisation du tableau je changerai une fois que j'aurai réussi à résoudre le problème de l'index au :
if (mots == tbMots[cpt])
Commenter la réponse de cs_soft57
Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 août 2019
298
0
Merci
Oui cet atteins 5, hors l'index va de 0 à 4, c'est pourquoi je te proposais le for.

Mais effectivement la boucle (while ou for) nest pas la méthode la plus appropriée.

Regarde du coté de Contains.



Whismeril
Commenter la réponse de Whismeril
Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 août 2019
298
0
Merci
Après si tu veux vraiment faire une boucle


while (cpt <5 || trouver == false)


si trouver est à false quelque soit la valeur de cpt, il exécutera le code.


Whismeril
Commenter la réponse de Whismeril
Messages postés
269
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
9
0
Merci
Salut,
cette déclaration :

while (cpt <5 || trouver == false)


est fausse, car si ton compteur vaut 4 et que trouver vaut true, ta boucle s'exécutera quand même.

Il faut donc que cpt soit inférieur à 5 ET que trouver soit faux, donc le "bon" code serait plutôt :

while (cpt < 5 && trouver == false)


ou

while (cpt < 5 && !trouver)


@+
Commenter la réponse de MasterShadows
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
0
Merci
oy,

pas sûr que le sujet soit encore d'actualité, mais perso j'aurais utilisé un simple foreach/break.
Commenter la réponse de cs_jopop
Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 août 2019
298
0
Merci
Bonsoir, je ne pense pas non plus que le sujet soit encore d'actualité,mais effectivement je l'était trompé. D'un autre côté je lui avais proposé Contains qui me semble répond au besoin


Whismeril
Commenter la réponse de Whismeril