-2

Примечание: Пожалуйста, не говорите, чтобы использовать методы класса String, поскольку здесь я создаю все методы String самостоятельно.Java: Создание класса String: ArrayIndexOutOfBoundsException

Цель: рассмотреть двухструнный принц и сони. Я хочу computeConcate метод запросить позицию (скажем 4 введен), а затем получить строку с первого имени, начиная с начала до 4-го положения, и учесть ее фамилией viz soni. Поэтому я получил prinsoni

Ошибка: ArrayIndexOutOfBondsException на линии обозначен как ошибки в computeConcate() метод

Причина ошибки: Строка, полученный таким образом (то есть конкатенации первого и последнего имени может быть atmost длины первого + фамилия)

так что я создал Струнный

char []firstSubString; 
    firstSubString = new char[so.computeLength(firstName) + so.computeLength(lastName)]; 

ее длина прямо сейчас, как я, хотя сумма первого и последнего имени, но после этого метода computeSubstring() она меняется от длины имени.

Что я хочу?

Можете ли вы предоставить мне путь, так что computeSubstring не заканчивается меняющийся ДЛИНА firstSubString.

/** 
* Take two strings 
* Run a loop pause when counter is encountered 
* Now use + to concatenate them 
**/ 
@Override 
public char[] computeConcatenation(char[] firstName, char[] lastName, int pos) { 
    StringClass so = new StringClass(); 
    Boolean flag = false; 
    char []firstSubString; 
    firstSubString = new char[so.computeLength(firstName) + so.computeLength(lastName)]; 

    System.out.println(firstSubString.length); // O/p is 10 (length of           //             first name + last name 

    firstSubString = so.computeSubstring(firstName, pos); 

    System.out.println(firstSubString.length); // o/p is 6. length of       //             first name 

    int len = so.computeLength(firstSubString); 

    // To find pos 
    for(int i = 0; i < so.computeLength(lastName); i++){ 

     // ArrayIndexOfOfBondsException on this line 
Error : firstSubString[len + i] = lastName[i]; 
    } 
    return firstSubString; 
} 



Here is the code for substring method 

/** 
* Traverse the string till pos. Store this string into a new string 
*/ 
@Override 
public char[] computeSubstring(char[] name, int pos) { 
    StringClass so = new StringClass(); 
    char []newName; 
    newName = new char[so.computeLength(name)]; 



     for(int i = 0; i < so.computeLength(name); i++){ 
     if(i == pos) break; 
     newName[i] = name[i]; 
    } 
    return newName; 
} 
+1

Вы должны написать утилиту/метод тестирования, который берет ваш аргумент и выгружает их стандартным образом. Просто написать этот метод, вероятно, покажет вам, где ошибка. – jdv

+0

@ GiovanniBotta Codereview предназначен только для ** рабочего кода **. Сломанный код вне темы. –

+0

@jdv Написание метода тестирования - это более поздняя тема, когда я выясню это изменение в проблеме длины, пояснил я. Вопрос прямо сейчас в том, почему, черт возьми, длина firstSubString была изменена после метода computeSubString и как я могу предотвратить ее изменение. –

ответ

1

Ну, это меняет, потому что вы перезапись firstSubString здесь:

firstSubString = so.computeSubstring(firstName, pos); 

Что вы хотите сделать; однако, скопируйте результат computeStringв в первую часть firstSubString. Вы можете сделать это довольно просто с System.arraycopy()

char[] result = so.computeSubstring(firstName, pos); 
System.arraycopy(result, 0, firstSubstring, 0, result.length); 

Это скопирует результат в передней части firstSubstring. Это не изменит его длину.

+0

спасибо для объяснения., Проблема решена –

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

  • Нет связанных вопросов^_^