ArrayIndexOutofBoundsException Ошибка, но не знаю почему - PullRequest
0 голосов
/ 20 ноября 2010

Итак, я создаю класс для «MiniString», который просто полон методов экземпляра для объекта MiniString, каждая MiniString имеет переменную экземпляра, которая является char []. При тестировании моих методов, я не могу найти, где я ошибаюсь с моим методом substring (). Есть два метода подстроки, где один принимает параметр типа int, а другой - два параметра типа int. Я продолжаю получать ошибку в методе с одним параметром int. Предполагается, что метод substring возвращает новую MiniString, сформированную из символов между позицией в целевой Ministring, указанной параметром int, и концом целевой MiniString. Ошибка, которую я продолжаю получать в своем тестере JUnit, заключается в следующем:

java.lang.ArrayOutofBoundsException:22
at MiniString.substring(MiniString.java:141)
at MiniString.substring(MiniString.java:159)

Вот мои конструкторы для объекта MiniString:

private char[] miniscule;

 MiniString(char[] array){
  int i = 0;
  miniscule = new char[array.length];
  while (i < array.length){
   miniscule[i] = array[i];
   i++;
  }
 }
 MiniString(String string){
  int i = 0;
  miniscule = new char[string.length()];
  while (i < string.length()){
   this.miniscule[i] = string.charAt(i);
   i++;
  }
 }

и вот код для двух методов substring ():

public MiniString substring(int start, int end){
  int i = start; 
  if (end > start){
   char[] temp = new char[end - start];
   MiniString range = new MiniString(temp);
   while (i < end){
    range.miniscule[i] = this.miniscule[i];
    i++;
   }
   return range;
  }
  else{
   char[] temp = new char[1];
   MiniString range = new MiniString(temp);
   range.miniscule[0] = 0;
   return range;
  }
 }
 public MiniString substring(int position){
  int start = position;
  int end = this.miniscule.length;
  char[] temp = new char[end - start];
  MiniString output = new MiniString(temp);

  output = substring(start, end);
  return output;
 }

Спасибо за вашу помощь!

Ответы [ 2 ]

5 голосов
/ 20 ноября 2010

В вашем первом методе substring строка

range.miniscule[i] = this.miniscule[i];

является наиболее вероятным.Я ожидаю, что вы действительно хотите, чтобы у

range.miniscule[i - start] = this.miniscule[i];

String были методы подстроки, которые примерно соответствуют тому, что вы делаете здесь, но я предполагаю, что вы делаете это, чтобы научиться, а не изобретать обработку строк для производственного использования..

Если вы используете Java 6, возможно, вы захотите взглянуть на метод Arrays.copyOfRange(T[] ts, int i, int i1), который выполняет большую часть работы, которую вы выполняете в ваших substring методах.

0 голосов
/ 21 ноября 2010

Дон уже указал, в чем ваша проблема, вот еще пара мыслей для вас

Пример строки "hello"

  • Ok: start = 0, end = 5 => i = 0, range.length = 5 и range.miniscule [i] находится внутри диапазона
  • Ошибка: начало = -1, конец = 0 => i = -1, range.length = 1, но диапазон.miniscule [i] находится вне диапазона для -1
  • Ошибка: начало = 4, конец = 5 => i = 4, range.length = 1, но range.miniscule [i] находится вне диапазона
  • Err: start = 0, end = 7 => i = 0, this.miniscule [i] не будет работать в течение 5 и 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...