2017-10-02 4 views
0

J'ai une boucle recherchant l'index du convertisseur de caractères entré par l'utilisateur dans un tableau char par rapport au mot secret, et pendant qu'il le boucle pendant combien de temps le mot est encore ne vais pas à mon messagebox (qui est pour le débogage pour vérifier si cela a fonctionné). Je ne sais pas non plus comment révéler une lettre.Boucle C# pour la recherche du caractère non fonctionnel

private void guessBtn_Click(object sender, EventArgs e) 
{ 
    char[] randomCharArray = randomInput.ToLowerInvariant().ToCharArray(); 
    char[] userInputArray = userInput.ToLowerInvariant().ToCharArray(); 
    for (int i = 0; i < randomCharArray.Length; i++) 
    { 
     if (randomCharArray[i] == userInputArray[i]) 
     { 
      MessageBox.Show("Hi"); 
     } 
    } 
} 

private void resetGamebtn_Click(object sender, EventArgs e) 
{ 
    SetUpWords(); 
} 

private void SetUpWords() 
{ 
    string path = (@"C:\commonwords.txt"); // Save the variable path with the path to the txt file 
    words = File.ReadAllLines(path); 
    int guessIndex = (new Random()).Next(words.Length); 
    currentWord = words[guessIndex]; 

    for (int i = 0; i < currentWord.Length; i++) 
    { 
     wordlbl.Text += "*"; 
    } 
} 
+1

légèrement liée: Première vérification doit être pour des longueurs égales ... – Fildor

+2

Avez-vous l'étape à travers dans un débogueur? Je suppose que les valeurs ne sont pas ce que vous pensez qu'elles sont. – Fildor

+0

En passant par-dessus oui la valeur de tableau de char aléatoire dans la boucle for est identique à userInputArray et la valeur de i reste égale à zéro lorsque vous cliquez sur reset pour exécuter la méthode SetupWords pour l'exécuter une seule fois, lorsque Je clique dessus il charge de nouveaux mots et continue d'y ajouter * https://codepaste.net/s9r28n Maintenant obtenir un index hors de l'exception à l'exception de userInputArray [i] dans les instructions if –

Répondre

0

Si randomInput et userInput sont des zones de texte, vous avez oublié .Text pour obtenir une valeur String.

Essayez ceci:

char[] randomCharArray = randomInput.Text.ToLowerInvariant().ToCharArray(); 
char[] userInputArray = userInput.Text.ToLowerInvariant().ToCharArray(); 

au lieu de ceci:

char[] randomCharArray = randomInput.ToLowerInvariant().ToCharArray(); 
char[] userInputArray = userInput.ToLowerInvariant().ToCharArray(); 

Modifier après donné plus d'informations en commentaire:

Le hors d'exception de l'indice est due au fait que randomCharArray est supérieur à userInputChar.

2 solution potentiels:

private void guessBtn_Click(object sender, EventArgs e) 
    { 
     char[] randomCharArray = randomInput.ToLowerInvariant().ToCharArray(); 
     char[] userInputArray = userInput.ToLowerInvariant().ToCharArray(); 
     //Assume that userInput would never be superior than randomCharArray 
     //And contain only one char 
     for (int i = 0; i < randomCharArray.Length; i++) 
     { 
      if (randomCharArray[i] == userInputArray[0]) 
      { 
       MessageBox.Show("Hi"); 
      } 
     } 
     // Clean userInput in form 
     userInputBox.Text = ""; 
    } 

Et

private void guessBtn_Click(object sender, EventArgs e) 
{ 
    char[] randomCharArray = randomInput.ToLowerInvariant().ToCharArray(); 
    char[] userInputArray = userInput.ToLowerInvariant().ToCharArray(); 
    // userInput can be equal to randomCharArray but running is more longer 

    for (int i = 0; i < randomCharArray.Length; i++) 
    { 
     for(int j = 0; j < userInputArray.Length; j++){ 
     if (randomCharArray[i] == userInputArray[j]) 
     { 
      MessageBox.Show("Hi"); 
     } 
     } 
    } 
} 
+0

Je reçois un soulignement rouge avec une erreur disant "Chaîne ne contient pas de définition pour le texte et aucune extension Texte de la méthode acceptant un premier argument de type string peut être trouvé EDIT: Fixé comme seul userInputArray était d'une zone de texte EDIT: Still index hors de portée mais lengh renvoie la longueur du mot courant mais je reste toujours 0 et obtient l'index hors de portée à cette ligne if (randomCharArray [i] == userInputArray [i]) –

+0

EDIT: Toujours l'index hors de portée mais lengh renvoie la longueur du mot courant mais je ne l'augmente que jusqu'à ce qu'il obtienne une instruction if –

+0

Comme je l'ai dit, est seulement correct, si userInput ou randomInput sont Textbox Déboguez sur userinput, vérifiez s'il est correctement initialisé et si – EchoZulu