迭代字符数组时的无限循环

时间:2016-03-08 09:33:52

标签: c#

当我尝试访问多行输入时,以下程序进入无限循环,您是否知道为什么它不起作用?

namespace AlternatingCharacters
{
    class Program
    {
        static void Main(string[] args)
        {
            int N = Int32.Parse(Console.ReadLine());

            string[] str = new string[N];
            for (int i = 0; i < N ; i++)
            {
                str[i] = Console.ReadLine();
            }

            for (int i = 0; i < str.Length; i++)
            {
                int count = 0;
                Char[] strArray = str[i].ToCharArray();
                for (int j = 0; j < strArray.Length; j++)
                {
                    if (strArray[i] == strArray[i + 1])
                    {
                        count++;
                    }
                }
                Console.WriteLine(count);
                Console.ReadLine();
            }

        }
    }
}

2 个答案:

答案 0 :(得分:4)

问题出在这一行:

for (int j = 0; i < strArray.Length; j++)

您的情况是检查i,而不是j,因此i始终为0(起始值),并且在循环期间永远不会更改。

正确的代码是:

for (int j = 0; j < strArray.Length; j++)

之后它将在这一行失败:

if (strArray[i] == strArray[i + 1])

最后,它找不到'最后一个索引+ 1',你可以通过在末尾减去一个来阻止,所以这个(我想你在这里需要j):

for (int j = 0; j < strArray.Length - 1; j++)
{
    if (strArray[j] == strArray[j + 1])
    {
        count++;
    }
}

答案 1 :(得分:0)

错误来自这段代码:

for (int i = 0; i < str.Length; i++)
{
    int count = 0;
    Char[] strArray = str[i].ToCharArray();
    for (int j = 0; i < strArray.Length; j++)
    {
        if (strArray[i] == strArray[i + 1])
        {
            count++;
        }
    }
    Console.WriteLine(count);
    Console.ReadLine();
}

首先你的内循环的循环条件是错误的。在增加j时,检查i是否等于数组中的元素数。然而,比这更重要的是你也使用whring数组元素。我想您应该使用if (strArray[j] == strArray[j + 1])而不是使用i作为索引。

所有这一切都应该有效:

for (int i = 0; i < str.Length; i++)
{
    int count = 0;
    Char[] strArray = str[i].ToCharArray();
    for (int j = 0; j < strArray.Length; j++)
    {
        if (strArray[j] == strArray[j + 1])
        {
            count++;
        }
    }
    Console.WriteLine(count);
    Console.ReadLine();
}