问题描述
因此,我正在创建一个名为“ Sack”的通用数据结构。 在此方法中,我将物品添加到麻袋,抓取随机物品,查看物品是否为空或丢弃其内容等。此外,我还在创建它以扩展为容纳所需的物品。
目前,我正在使用add方法,但是我在add方法上遇到了麻烦,我正在尝试一种将参数中的内容添加到麻袋中的方法。
import java.util.Arrays;
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;
}
通过这种方法,我试图将商品添加到我的麻袋里。 运行测试时,我被告知这是不正确的。 如果有办法可以改善这一点。
public void add(E item)
{
elementData[size] = item;
size++;
}
elementData是我将项目添加到其中的内容。
更新资料
我更新了add方法,使其看起来像这样。
public void add(E item)
{
if(size >= elementData.length-1)
{
elementData[size] = item;
size++;
}
}
我现在收到的消息是add无法正常工作并检查大小用法。
1楼
听起来好像有一个关于您的麻袋应该做的规格的事情,但您没有粘贴。
听起来,即使麻袋已满,您的add方法也应该可以使用。
这意味着您需要创建一个新的数组,复制所有元素,然后用新的数组替换您在Sack实例中拥有的数组(因为Java数组无法增长或收缩)。
查看Java自己的ArrayList的来源,以获取有关如何完成操作的提示。
2楼
您不能确保Java数组的容量,而Javascript可以! 您可以创建一个新副本并复制:
public void add(E element) {
int index = size++;
if(size >= elementData.length-1) {
// it ensures elementData
elementData = java.util.Arrays.copyOf(elementData, size);
}
elementData[index] = element;
}
或跳过确保阵列容量的操作并更改检查方向:
public void add(E element) {
if(size < elementData.length-1) {
elementData[size++] = element;
}
// TODO else notice of the unsuccessfull add
}
3楼
因此,经过无数次尝试,我将@rockfarkas归功于其解决了这一问题。 我输入以下代码,它解决了我的add方法代码。
public void add(E item)
{
int index = size++;
if(size >= elementData.length-1)
{
elementData = Arrays.copyOf(elementData, size);
}
elementData[index] = item;
}
4楼
这是另一种方式
public void add(E item)
{
ensureCapacity(size+1);
elementData[size] = item;
size++;
}
这也可以,但是我必须准确地修改我的ensureCapacity方法。