Home > OS >  How to check if input character equal to character in word
How to check if input character equal to character in word

Time:11-05

I am trying to check whether the key that the user presses is equal to the key in a word. e.g. the word is "flower" and the user enters "f" the output should be true, if the user presses "x" the output should be false. When I try to enter a character it give me System.InvalidCastException: 'Unable to cast object of type 'System.Char[]' to type 'System.IConvertible'.' where the code checks if user input matches key in the word.

private bool KeyCheck(char key)
{
    //word arraylist values set to word in array currentWords at index 0
    word.Add((currentWords[0].ToCharArray()));

    for (int i = 0; i < word.Count; i  )
    {
        //checks if user input matches key in word
        if (Convert.ToChar(word[i]) == key)
        {
            correct  ;
            return true;
        }                                         
    }

    incorrect  ;
    return false;
}

CodePudding user response:

 private bool KeyCheck(char key)
 {
     return  currentWords[0].Contains(key);
 }

CodePudding user response:

If you want just to check if key is within currentWords[0], try Contains:

// Assuming that currentWords[0] is never null
private bool KeyCheck(char key) => currentWords[0].Contains(key);

However, as I can see, you have some correct and incorrect counters; if they must be kept as well as words we can use Contains again but with some extra logic:

private bool KeyCheck(char key) {
  word.Add((currentWords[0].ToCharArray()));

  // Let it be a good old loop; I have put "char[] w", not "var w" 
  // to be evident what's going on 
  foreach (char[] w in words) {
    if (w.Contains(key)) {
      correct  ;

      return true;
    }
  }
  
  incorrect  ;

  return false;
}

Linq solution (we query words) can be something like this:

using System.Linq;

...

private bool KeyCheck(char key) {
  word.Add((currentWords[0].ToCharArray()));

  bool result = words.Any(w => w.Contains(key));

  if (result) 
    correct  ;
  else
    incorrect  ;

  return result;
}

CodePudding user response:

word[i] is of type System.Char[] like the exception says which can't be converted to a character. Not sure what type currentWords is but if it's a string array then when you add currentWords[0] to word you can do

word.Add(Convert.ToChar(currentWords[0]));

and then your if statement would just be

if (word[i] == key)

  • Related