当我尝试访问多行输入时,以下程序进入无限循环,您是否知道为什么它不起作用?
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 :(得分: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();
}