2017-02-18 4 views
0

Я пытаюсь сделать домашнее задание маленькой школы. Так что для ввода, это будет любое имя, как Майк.IndexOutOfRangeException, но нет вне допустимого диапазона

Но нам нужно проверить, действительно ли это имя на английском языке. Если это так, то вывод будет «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

На самом деле я не копировал функцию «main», а так же минус, что это будет строка 8. (14-6) –

+0

Вы можете использовать одну классную функцию, называемую debug. Также мы не знаем, что такое строка 14. – mybirthname

+0

Прочитайте [Как отлаживать небольшие программы] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Ах, а массив длиной пять имеет индексы 0,1,2,3,4. –

ответ

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 (не до Length - 1) - вы должны изменить <= на <

0

Существует абсолютно IndexOutOfRangeException, когда i == name.Length. Обратите внимание на нулевое индексирование.

1

Вы выходите из границ, потому что вы перебираете от 0 до длины массива. Если массив имеет 3 элемента, его длина будет 3, но ее индексы будут равны 0,1,2. И вы зацикливаетесь от 0 до длины, чтобы ваш индекс пошел 0,1,2 и 3. Вам нужно зациклиться от 0 до длиной-1, и это должно устранить проблему!

Смежные вопросы