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

cs_soft57
Messages postés
3
Date d'inscription
lundi 31 octobre 2011
Statut
Membre
Dernière intervention
13 janvier 2014
- 31 oct. 2011 à 12:51
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
- 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
A voir également:

7 réponses

Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
22 nov. 2011 à 19:18
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
1
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
31 oct. 2011 à 15:06
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
0
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
31 oct. 2011 à 15:20
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
0
MasterShadows
Messages postés
268
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
11
21 nov. 2011 à 15:59
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)


@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
22 nov. 2011 à 11:55
oy,

pas sûr que le sujet soit encore d'actualité, mais perso j'aurais utilisé un simple foreach/break.
0
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
31 oct. 2011 à 13:10
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
-1
cs_soft57
Messages postés
3
Date d'inscription
lundi 31 octobre 2011
Statut
Membre
Dernière intervention
13 janvier 2014

31 oct. 2011 à 13:50
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])
-1