2016-03-08 76 views
1

当我试图访问多行输入时,以下程序将进入无限循环,您是否知道为什么它不起作用?当迭代字符数组时,无限循环

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(); 
      } 

     } 
    } 
} 
+0

请编辑标题,只包含问题。任何其他细节/问题应该是该职位的一部分 – Anton

+4

我认为你在这里有一个_bigger_问题,而不是无限循环。你应该学习如何调试你的代码。阅读Eric Lippert:[如何调试小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)同样来自MSDN:[在Visual Studio中调试](https ://msdn.microsoft.com/en-us/library/sc65sadd.aspx) –

+0

而不是匿名'i'和'j',使用'stringIndex'和'characterIndex' - 直接问题将被清除 –

回答

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++; 
    } 
} 
+0

谢谢为了纠正,我改变了一部分代码,所以我在这里粘贴它时出错了。但即使在改变i-> j之后,它将进入索引输出错误。你能提出一个想法吗? –

+0

当我进行上述更改时,代码将起作用。 –

+0

谢谢,代码有效! –

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(); 
} 

首先你的循环条件的内循环是whrong。当您增加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(); 
}