Итак, я создаю общую структуру данных с именем "Sack".В этом я добавляю предметы в мешок, беру случайный предмет, проверяю, пуст ли он, или выгружаю его содержимое и т. Д. Также я создаю его, чтобы расширить, чтобы вместить столько предметов, сколько необходимо.
Вспомогательный метод remove должен удалить элемент в базовой структуре данных по указанному индексу.Это следует сделать, заменив его «последним» элементом в базовом массиве.Это также должно гарантировать, что все неиспользуемые элементы обнуляются.
В настоящее время я работаю над методом удаления, и у меня возникают проблемы с моим методом удаления.Я получаю ошибки, когда запускаю свои тесты, говоря, что в нем нет правильных модификаторов.Поэтому мой код
public class Sack<E>
{
public static final int DEFAULT_CAPACITY = 10;
private E [] elementData;
private int size;
@SuppressWarnings("unchecked")
public Sack()
{
elementData = (E[]) new Object[DEFAULT_CAPACITY];
}
@SuppressWarnings("unchecked")
public Sack(int capacity)
{
if(capacity < 0)
{
throw new IllegalArgumentException("capacity " + capacity);
}
this.elementData = (E[]) new Object[capacity];
}
public boolean isEmpty()
{
if(size == 0)
{
return true;
}
else
{
return false;
}
}
public void add(E item)
{
int index = size++;
if(size >= elementData.length-1)
{
elementData = Arrays.copyOf(elementData, size);
}
elementData[index] = item;
}
public E [] dump()
{
E [] E2 = Arrays.copyOf(elementData, size);
for(int i = 0; i < size; i++)
{
elementData[i] = null;
}
size = 0;
return E2;
}
Я получаю ошибку в моем удалении прямо здесь
public void remove(int index)
{
for (int i = index; i < size; i++)
{
elementData[i] = elementData[i + 1];
}
size--;
}
}
Значение, которое он ожидает получить, равно 2, однако, что он получает, равняется 1. Выпадает внизлюбые способы обеспечения этого.
Итак, вот мои тесты.Я не могу изменить свои тесты, только мой код.Я получаю сообщение об ошибке в первой строке.Я прокомментирую это, чтобы вы могли видеть.
@Test
public void testRemove()
{
assertEquals(2, remove.getModifiers(), "remove does not have the correct modifiers"); // I receive an error here.
try
{
Random rand = new Random();
Integer[] setElementData = new Integer[10];
ArrayList<Integer> expectedElements = new ArrayList<Integer>();
int randElement;
for(int i=0; i<10; ++i)
{
randElement = rand.nextInt(50) + 1;
setElementData[i] = randElement;
expectedElements.add(randElement);
}
elementData.set(s, setElementData);
size.set(s, 10);
int randIndex;
int numEe;
while(!expectedElements.isEmpty()) {
numEe = expectedElements.size()-1;
randIndex = rand.nextInt(expectedElements.size());
expectedElements.set(randIndex, expectedElements.get(numEe));
expectedElements.remove(numEe);
remove.invoke(s, randIndex);
assertEquals(expectedElements.size(), size.get(s), "remove is not working correctly (check size usage)"); //Error now takes place here.
for(int i=0; i<expectedElements.size(); ++i) {
assertEquals(expectedElements.get(i), ((Object[])elementData.get(s))[i], "remove is not working correctly (sack array element order incorrect)");
}
assertNull(((Object[])elementData.get(s))[expectedElements.size()], "remove is not working correctly (sack array element not nullified correctly)");
}
assertEquals(0, size.get(s), "remove is not working correctly (check size usage)");
} catch (Exception e) {
fail("remove is not working correctly");
}
}