C# IndexOutOfRangeException,但没有超出范围

C# IndexOutOfRangeException,但没有超出范围,c#,arrays,C#,Arrays,我正试着做一点学校作业。因此,对于输入,它将是任何名称,如迈克 但是我们需要检查这个名字是否是英文的。如果是,则输出为“Hello,NAME” 我通过检查每个字母的ASCII码来检查英文字母,看看它是否是英文字母ASCII码的一部分。还使用布尔数组完成了这项工作 我的代码如下: string name = Console.ReadLine(); bool[] isEnglish = new bool[name.Length]; int num = 0; for (int i = 0; i&l

我正试着做一点学校作业。因此,对于输入,它将是任何名称,如迈克

但是我们需要检查这个名字是否是英文的。如果是,则输出为“Hello,NAME” 我通过检查每个字母的ASCII码来检查英文字母,看看它是否是英文字母ASCII码的一部分。还使用布尔数组完成了这项工作

我的代码如下:

string name = Console.ReadLine();
bool[] isEnglish = new bool[name.Length];
int num = 0;

 for (int i = 0; i<=name.Length;i++)
 {
      for (int ii = 65;ii<=122;ii++)
      {
          if(name[i] == (char)ii)
          {
              isEnglish[i] = true;

              break;
           }
       }
}

for (int iii = 0; iii<=name.Length;iii++)
{
     if (isEnglish[iii] == true)
     {
         num++;
     }        
 }

if(num == name.Length)
Console.WriteLine("Hello, {0}!", name);

else
Console.WriteLine("name isn't in English");   
那么错误是第14行吗?我看第14行没有错。我被难住了

改变这个:

for(int i = 0; i <= name.Length; i++)
//and
for (int ii = 65; ii <= 122; ii++)
//and
for(int iii = 0; iii <= name.Length; iii++)
for(int i=0;i更改此项:

for(int i = 0; i <= name.Length; i++)
//and
for (int ii = 65; ii <= 122; ii++)
//and
for(int iii = 0; iii <= name.Length; iii++)

用于(int i=0;i当
i==name.Length
时,绝对有一个
indexootfrangeexception
。注意从零开始的索引。

i==name.Length
时,绝对有一个
indexootfrangeexception
。注意从零开始的索引。

你正在越界,因为你正在从0循环到数组的长度。如果数组有3个元素,则其长度将为3,但其索引将为0,1,2。 你从0循环到长度,所以你的索引是0,1,23。
您需要从0循环到长度-1,这应该可以解决问题!

您正在越界,因为您正在从0循环到数组的长度。如果数组有3个元素,其长度将为3,但其索引将为0,1,2。 你从0循环到长度,所以你的索引是0,1,23。
您需要从0循环到长度-1,这应该可以解决问题!

我实际上没有复制'main'函数和usings'以便减到第8行。(14-6)你可以使用一个很酷的功能,叫做debug。我们也不知道哪一行是第14行。Read。哦,一个长度为5的数组有索引0,1,2,3,4。C#使用Unicode字符集及其UTF-16编码。所以,你说的是字母。提示:使用“A”而不是65,因为它更容易阅读。(顺便说一句,并不是所有的名字都像Mike。)比利·雷、达西、黛安、玛丽·安……)总之,注意不要从CS练习中学到错误的东西。实际上我没有复制“main”函数和用法,所以减到第8行。(14-6)你可以使用一个很酷的功能,叫做debug。我们也不知道哪一行是第14行。Read。哦,一个长度为5的数组有索引0,1,2,3,4。C#使用Unicode字符集及其UTF-16编码。所以,你说的是字母。提示:使用“A”而不是65,因为它更容易阅读。(顺便说一句,并不是所有的名字都像Mike。)比利·雷、达西、黛安、玛丽·安……)总之,注意不要从CS练习中学到错误的东西。
for(int i = 0; i < name.Length; i++)
//and
for (int ii = 65; ii < 122; ii++) // but this case may work for you without changes
//and
for(int iii = 0; iii < name.Length; iii++)