IndexOutOfRangeException,但没有超出范围

时间:2017-02-18 10:45:36

标签: c# arrays

我试图做一点学校作业。所以对于输入,它将是任何名称,如迈克。

但我们需要检查名称是否实际上是英文。如果是,那么输出将是" 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");   

我收到了错误:

Unhandled Exception:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
  at Solution.Main (System.String[] args) [0x00024] in solution.cs:14 
[ERROR] FATAL UNHANDLED EXCEPTION: System.IndexOutOfRangeException: Index was outside the bounds of the array.
  at Solution.Main (System.String[] args) [0x00024] in solution.cs:14

所以错误就像第14行一样?第14行我没有看到任何错误。我很难过。

3 个答案:

答案 0 :(得分:4)

改变这个:

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 < 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++)

索引从0开始到Length - 1(始终低于Length),但您的索引是从0Length(而不是{{1} }}) - 您应该将Length - 1更改为<=

答案 1 :(得分:1)

你越界了,因为你从0循环到数组的长度。如果数组有3个元素,则其长度为3,但其索引为0,1,2。 并且您从0循环到长度,因此您的索引为0,1,2 3。 你需要从0循环到 length-1 ,这应该解决问题!

答案 2 :(得分:0)

IndexOutOfRangeException时绝对有i == name.Length。注意从零开始的索引。