java.lang.StringIndexOutOfBoundsException: Индекс на низ извън диапазона: 3

Създавам програма, която определя дали две думи са анаграми една на друга или не. Имам обаче следната грешка и не съм напълно сигурен защо:

java.lang.StringIndexOutOfBoundsException: Индекс на низ извън диапазона: 4

Включих само този метод, а не цялата програма, защото това е методът, при който се предполага, че възниква грешката.

public StringBuffer differentCharacters() 
{
    StringBuffer difference = new StringBuffer();
    for (int i=0; i<StringBuffer1.length(); i++) 
    {
        if(StringBuffer1.charAt(i) != StringBuffer2.charAt(i))
        {
            difference.append(StringBuffer1.charAt(i));
        }
    }
    return difference;
}

person anon1996    schedule 23.11.2015    source източник
comment
Почти съм сигурен, че размерът на StringBuffer2 е по-малък от този на StringBuffer1. Което причинява изключението. Покажете ни още код.   -  person Mohammed Aouf Zouag    schedule 23.11.2015
comment
Защо това би причинило изключение?   -  person anon1996    schedule 23.11.2015


Отговори (1)


Получавате StringIndexOutOfBoundsException, защото извиквате StringBuffer2 с незаконен индекс. Ето защо:

Имате общо 3 StringBuffers: difference, StringBuffer1 & StringBuffer2.

Обяснение:

StringBuffer difference= new StringBuffer();

Това е мястото, където създавате „резултата“ StringBuffer. Сега нека си представим за секунда, че:

  1. length на StringBuffer1 е 5
  2. length на StringBuffer2 е 3

Изпълнение:

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

В този цикъл вие итерирате въз основа на дължината на StringBuffer1 (5). И така, ето какво се случва:

i = 0

if(StringBuffer1.charAt(0) != StringBuffer2.charAt(0))

i = 1

if(StringBuffer1.charAt(1) != StringBuffer2.charAt(1))

i = 2

if(StringBuffer1.charAt(2) != StringBuffer2.charAt(2))

i = 3

if(StringBuffer1.charAt(3) != StringBuffer2.charAt(3))

Задръжте! Не забравяйте, че дължината на StringBuffer2 е равна на 3? което означава, че следното:

StringBuffer2.charAt(3) // 0 based index : 0-1-2-3 crash !!

е незаконно. Следователно се хвърля StringIndexOutOfBoundsException и изпълнението е неуспешно.

person Mohammed Aouf Zouag    schedule 23.11.2015