2016-03-08 74 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(); 
}