2014-09-08 3 views
2

Это мой код для поиска нет. гласных в строке:Строковый индекс за пределами? Где?

{ 
    String inyo=inpeo.getText().toLowerCase(); 
    System.out.println(inyo); // Just checking for an empty string 

    int vowcount=0; 
    for(int i=0;i<=inyo.length();i++) 
{   
     char rol=inyo.charAt(i); 
     if(rol=='o'||'u'==rol||rol=='a'||rol=='e'||rol=='i') 
     { 
      vowcount=vowcount+1; 
      System.out.println(vowcount); 
     } 

     numout.setText(""+vowcount); 

    } 
}           

Теперь нет ничего плохого с выходом здесь-то находит не требуйте. гласных, как я и предполагал. Но это дает мне эту ошибку:

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 5 
at java.lang.String.charAt(String.java:646) 
at WordCheck.jButton2ActionPerformed(WordCheck.java:147) 
// Extra errors removed as they're irrelevant to my issue 

В результате, нет никакой возможности повторного использования программы, кроме закрытия и перезапуска. когда выход выходит по желанию, почему я получаю эту ошибку? У меня тоже нет пустых строк.

+0

'i <= inyo.length()' здесь. – TheLostMind

+0

??????????????? –

+0

Вам нужно написать i DaniEll

ответ

3

Последняя итерация цикла for вызывает исключение (когда i == inyo.length()). Просто замените его на:

for(int i=0; i<inyo.length(); i++) 
+0

Спасибо! Это сработало. Один вопрос: как же мой оператор повредил вещи? –

+0

Оператор сравнения 'i <= inyo.length()' –

+0

Индекс символа начинается с нуля. Последний символ имеет индекс 'inyo.length() - 1'. – manouti

3

i<=inyo.length() здесь. Индекс String начинается с 0. Количество отсчетов начинается с единицы. Таким образом, последний индекс строки является 4, когда его длина равна 5.

Это должно быть

i<inyo.length()

1

Ваш for цикл будет один слишком далеко, это

for(int i=0;i<=inyo.length();i++) 

должен be

for(int i=0;i<inyo.length();i++) 

Обратите внимание, что когда i == invo.length() он прошел конец массива, потому что Java начинает индексирование с 0.

1

для цикла должен быть

for(int i=0; i<inyo.length(); i++) 

В настоящее время, когда она переходит к последней итерации индекс строки равен 4, тогда как inyo.length() 5. Следовательно, это приводит к вне границ.

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