I have started trying to learn c#.
I don't understand why my use of Array.IndexOf();
returns -1.
I want it to return the index numbers in the alphabet
based on the letters in a player_name
that you get from user input. I am trying to loop through the characters of the
player_name
and capture the index number of that character in the alphabet.
Take a look:
using System;
namespace FantasyGame
{
internal class Program
{
static void Main(string[] args)
{
string player_name = null;
string[] alphabet = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å" };
Console.Write("\nEnter your name: ");
player_name = Console.ReadLine();
string[] password = { };
foreach (char c in player_name)
{
int index = Array.IndexOf(alphabet, c);
Console.WriteLine(Array.IndexOf(alphabet, c));
Console.WriteLine(c);
}
}
}
}
If I replace the c
variable with a specific string value such as "k"
it returns the correct index number. Why? The ´´´c´´´ has a string value, right?
CodePudding user response:
The
c
has a string value, right?
No, it has a char
value. You can see that where you've declared the variable:
foreach (char c in player_name)
There are numerous fixes for this. I'd suggest the simplest is to just make alphabet
a string and use string.IndexOf
. Alternatively, to keep your code as similar as possible, make alphabet
a char[]
, e.g. by using String.ToCharArray
:
char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray();
CodePudding user response:
Replace
int index = Array.IndexOf(alphabet, c);
with
int index = Array.IndexOf(alphabet, c.ToString());
see the official docs,
alphabet
is an array of string, so we should pass a string to the second parameter of Array.IndexOf
CodePudding user response:
Your c is not a string
value, is a char
CodePudding user response:
This happens because you are comparing "c" which is of type Char
with an alphabet letter which is of type String
. What you can do is just change the type of the array you are using to Char[]
like this.
char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'æ', 'ø', 'å', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', 'æ', 'ø', 'å' };
Also pay attention to the quotes in which char types use single quotes ' ' but string types use double quotes " " .
CodePudding user response:
MSDN Documentation of Array.IndexOf()
says
Searches for the specified object and returns the index of its first occurrence in a one-dimensional array or in a range of elements in the array.
Now in your code,
If you look at closely, your
alphabet
array is an array ofstring
your code
int index = Array.IndexOf(alphabet, c)
is trying to find unicode char value in alphabet string and that is why you are getting -1 as a result.To make it work, type of
alphabet
and type ofc
needs to be same. Same in the sense, if alphabet is achar[]
thenc
should be char.You can achieve it in two ways,
- Converting
alphabet
as an array ofchar
- Converting
c
to string.
- Converting
First Approach,
char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray();
int index = Array.IndexOf(alphabet, c); //here alphabet is a type of char array
Second Approach,
string[] alphabet = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å" };
int index = Array.IndexOf(alphabet, c.ToString());