当我尝试在arrray中找到char的索引时,我得到-1

时间:2018-09-04 19:03:25

标签: c#

我正在尝试编写一个简单的应用程序,以允许用户键入字母,并找出它在数组中的位置,然后将该位置替换为字母k。

我不知道如何在特定位置替换char,程序给出的奇怪值是-1。

感谢您的帮助。

源代码:

class Program
{
    static void Main(string[] args) {

        Random r = new Random();
        string[] d = {"a" , "b" , "c" , "d" };

        string randomString= "";
        for (int i= 0; i < 5; i++)
        {
            randomString = randomString + d[r.Next(d.Length)];
        }
        Console.WriteLine("Debug: Random string output: " + randomString);

        char[] charArray = randomString.ToCharArray();
        Console.WriteLine("Type one char of random String to find postion of it:");
        string userinput = Console.ReadLine();
        int pos = Array.IndexOf(charArray , userinput);
        Console.WriteLine(userinput +" is at " + pos + ".");

        //Something to replace a char at that position with k 
         // Here display modified string with "k"
       Console.WriteLine(randomString); 
        Console.ReadLine();

        /*
         * Console output:
          Debug: Random string output: bbccb
           Type one char of random String to find postion of it:
           c  is at -1

        */

    }
}

2 个答案:

答案 0 :(得分:1)

问题出在这一行

int pos = Array.IndexOf(charArray , userinput);

您有一个字符数组,但您正在搜索字符串
更改为

int pos = Array.IndexOf(charArray , userinput[0]);

当然,您还应该检查用户是否键入了任何内容

答案 1 :(得分:0)

您的值userinput是一个字符串,因此与数组中的任何单个字符相比都不匹配。您可以使用userinput[0]获取字符串中的第一项,但是如果用户输入一个空字符串,则将崩溃(一个空字符串没有有效的“位置0”)。

相反,请尝试以下操作:

int pos = Array.IndexOf(charArray , userinput.FirstOrDefault());

如果有则返回第一个字符;如果不是,它将返回一个值为char的{​​{1}},该值与数组中的任何内容都不匹配,也不会导致程序崩溃。


哦,还有另一件事:要在特定位置替换字符,只需直接设置该位置的值:

00