2016-09-28 4 views
0

Мне нужно создать список массивов с использованием дженериков. Мой метод добавления, похоже, работает иногда, однако у моего метода get есть много проблем, и я не получаю ошибку компиляции. Однако, когда я пытаюсь получить объект из списка Array, используя мой метод get, он выдает исключение java out of bounds. вот я, что у меня есть, и я использую BlueJ. Кроме того, инструкции заключались в том, чтобы установить начальную длину «иллюзии» равной нулю.Общий список массивов

public class AL <X> { 
    private X[]data; 
    private int count; 

    public AL() { 
     count = 0; 
     data = (X[]) new Object[0]; 
    } 

    public void add (X v) { 
     if (data.length != count) { 
      data[count] = v; 
      count++; 
     } else { 
      X [] newdata = (X[]) new Object[data.length * 2]; 
      for (int i = 0; i < data.length; i++) { 
       newdata[i] = data [i]; 
      } 
      count++; 
      data = newdata; 
     } 
    } 

    public X get(int index) { 
     if (index >= count || index < 0) { 
      throw new ICantEven(); 
     } else { 
      return data[index]; 
     } 
    } 
} 

ответ

1

Ваш метод add не работает, так как исходный массив подложки вы используете имеет 0 длину, которая остается 0 даже при попытке удвоить (с 0 * 2 == 0).

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

Прежде всего, изменить начальный размер массива, созданный конструктором быть положительными:

data = (X[]) new Object[10]; 

Затем добавьте

data[count] = v; 

к статье еще вашему метода add (непосредственно перед count++;).

Ваш метод добавь может быть дополнительно упрощена:

public AL() 
{ 
    count = 0; 
    data = (X[]) new Object[10]; 
} 

public void add (X v) 
{ 
    // resize backing array if necessary 
    if (data.length == count) 
    { 
     X [] newdata = (X[]) new Object[data.length * 2]; 
     for (int i = 0; i < data.length;i++) 
     { 
      newdata[i] = data [i]; 
     } 
     data = newdata; 
    } 
    // add new element 
    data[count] = v; 
    count++; 
} 
Смежные вопросы