Итак, я создаю общую структуру данных с именем "Sack".В этом я добавляю предметы в мешок, беру случайный предмет, проверяю, пуст ли он, или выгружаю его содержимое и т. Д. Также я создаю его для расширения, чтобы вместить столько предметов, сколько необходимо.
Яв настоящее время работает над методом sureCapacity, который должен гарантировать, что мешок имеет емкость для значения своего параметра, и, если нет, создать новую базовую структуру данных для пакета, которая в два раза превышает текущую емкость пакета.
Я пробовал множество способов сделать это, но получаю сообщение об ошибке.Я опущу большую часть своего кода, а также два метода, которые я попробовал, и указал на ошибки, которые я получаю.
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 E [] dump()
{
E [] E2 = Arrays.copyOf(elementData, size);
for(int i = 0; i < size; i++)
{
elementData[i] = null;
}
size = 0;
return E2;
}
Первый. В этой ошибке, в основном, когда я запускаю свои тесты, я говорю, что
AssertionFailedError: sureCapacity работает неправильно
private void ensureCapacity(int capacity)
{
if (size != capacity)
{
int newCapacity = (capacity * 2) + 1;
elementData[capacity] = elementData[newCapacity];
}
}
Небольшое обновлениеБуду постить мои тесты.Вы, ребята, можете проверить это и сообщить мне, однако я не могу изменить свои тесты вообще.Только мой кодЯ прокомментировал первую строку, так как именно здесь происходит моя ошибка.
@Test
public void testEnsureCapacity()
{
assertEquals(2, ensureCapacity.getModifiers(), "ensureCapacity does not have the correct modifiers"); // My error occurs here currently.
try
{
for(int i=0; i<=10; ++i)
{
ensureCapacity.invoke(s, i);
assertEquals(10, ((Object[])elementData.get(s)).length, "ensureCapacity is not working correctly (capacity changing unnecessarily)");
}
ensureCapacity.invoke(s, 11);
assertEquals(21, ((Object[])elementData.get(s)).length, "ensureCapacity is not working correctly (capacity not increased correctly)");
Random rand = new Random();
int capacity = rand.nextInt(100)+1;
s = new Sack<Integer>(capacity);
for(int i=0; i<=capacity; ++i) {
ensureCapacity.invoke(s, i);
assertEquals(capacity, ((Object[])elementData.get(s)).length, "ensureCapacity is not working correctly (capacity changing unnecessarily)");
}
ensureCapacity.invoke(s, capacity+1);
assertEquals(capacity*2+1, ((Object[])elementData.get(s)).length, "ensureCapacity is not working correctly (capacity not increased correctly)");
} catch (Exception e) {
fail("ensureCapacity is not working correctly");
}
}