首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java语言中创建处理数组泛型的ensureCapacity方法

如何在Java语言中创建处理数组泛型的ensureCapacity方法
EN

Stack Overflow用户
提问于 2019-03-04 06:43:48
回答 1查看 265关注 0票数 0

因此,我创建了一个名为"Sack“的通用数据结构。在这个过程中,我将物品添加到一个袋子中,抓取一个随机的物品,看看它是否是空的,或者倾倒它的内容物等等。我还创建了它来扩展以容纳所需的任意数量的物品。

我目前正在研究一种ensureCapacity方法,它应该确保sack具有其参数值的容量,如果没有,则为sack创建一个新的底层数据结构,该结构是sack当前容量的两倍多。

我已经尝试了很多方法来做这件事,但是我一直收到错误。我将列出我的大部分代码,还有我尝试过的两种方法,并指出我收到的错误。

代码语言:javascript
复制
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: ensureCapacity未正常工作

代码语言:javascript
复制
private void ensureCapacity(int capacity)
{
   if (size != capacity)
    {
        int newCapacity = (capacity * 2) + 1;
        elementData[capacity] = elementData[newCapacity];
    }
}

稍作更新,我会发布我的测试。你们可以查看它并让我知道,但是我根本不能修改我的测试。只有我的代码。我注释了第一行,因为这是我的错误发生的地方。

代码语言:javascript
复制
@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");
    }
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54974535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档