但我们需要检查名称是否实际上是英文。如果是,那么输出将是" 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行我没有看到任何错误。我很难过。
答案 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
),但您的索引是从0
到Length
(而不是{{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
。注意从零开始的索引。