none
"Index was outside the bounds of the array" --> pourquoi ai-je ce message ?? RRS feed

  • Question

  • Bonjour,

    Lorsque je compile et je démarre l'application, celle-ci fonctionne mais j'ai le message suivant:

    "Index was outside the bounds of the array"

    Quelqu'un pourrait me donner une explication ?

    Voici le code: (Merci d'avance)

    namespace Exos4_Les_structures_de_répétition
    {
      class Program
      {
        static void Main()
        {
          
          // Exemple n°1: recherche de la première voyelle d'un mot:
          int i;
          bool n;
          char lettre;
          string valecran;
    
          i = 0;
          n = false;
          
    
          Console.WriteLine("donnez un mot: ");
          valecran = Console.ReadLine();
    
          // Répétition tant que : while {}... 
          while (n == false)
          {
    
            lettre = valecran[i];
    
            if (lettre == 'a' || lettre == 'e' || lettre == 'i' || lettre == 'o' || lettre == 'u' || lettre == 'y')
            {
              Console.Write(lettre);
    
            }
            else n = false;
            
            if (lettre == ' ' || i > 150) n = true;
            else n = false;
    
            i++;
          }
           
          Console.ReadLine();
    
          
    
        }
      }
    }
    
    mercredi 11 mai 2011 15:47

Réponses

  • Bonjour,

    ca veut dire que a un certain moment, le valeur de i est plus grand que le plus grand index possible dans valecran, c'est a dire plus grand que valecran.Length() - 1;

    if faut que tu finisse la boucle avant que i devienne trop grand.


    Regards, Nico
    mercredi 11 mai 2011 16:15

Toutes les réponses

  • Bonjour,

    ca veut dire que a un certain moment, le valeur de i est plus grand que le plus grand index possible dans valecran, c'est a dire plus grand que valecran.Length() - 1;

    if faut que tu finisse la boucle avant que i devienne trop grand.


    Regards, Nico
    mercredi 11 mai 2011 16:15
  • Bonjour,

    Vous devriez envisager une boucle For pour boucler sur le nombre de lettres dans le mot introduit par l'utilisateur. Vous interrompez votre boucle au 150ème caractère ou si le caractère vaut space. Mais cela veut dire que l'utilisateur doit introduire un space après son encodage, ce qu'il ne fait pas.

    Par exemple, si le mot est "test". Vous avez le message quand le second t est lu car la condition pour sortir de la boucle n'est pas remplie. lettre = "t" (i vaut à ce moment 3). Ensuite vous faite  un nouveau passage dans la boucle avec i = 4. Or le mot ne comporte que 4 lettres d'indice 0 à 3. (les index des tableaux en C# commencent à 0).

    Voici une adaptation:

          // Exemple n°1: recherche de la première voyelle d'un mot:
          char lettre;
          string valecran;
    
    
          Console.Write("donnez un mot: ");
          valecran = Console.ReadLine();
    
          for (int i = 0; i < valecran.Length; i++)
          {
            lettre = valecran[i];
    
            if (lettre == 'a' || lettre == 'e' || lettre == 'i' || lettre == 'o' || lettre == 'u' || lettre == 'y')
            {
              Console.Write(lettre);
              break; //pour vous arrêter après la première voyelle
            }
          }
    
          Console.ReadLine();
    

    mercredi 11 mai 2011 18:48
  • Merci pour l'info.

    J'ai effectivement pu solutionner le problème.

    A+

    Philippe

    mercredi 11 mai 2011 18:48