Java 我在数组中得到空值
我在玩ArrayList,每次它超过它的大小时,我都试图让它增长两倍。以下是我的添加方法:Java 我在数组中得到空值,java,arrays,Java,Arrays,我在玩ArrayList,每次它超过它的大小时,我都试图让它增长两倍。以下是我的添加方法: public class ArrayExpander { private int size; private int noOfItems; private Object[] store; private final int INITIALSIZE = 2; public ArrayExpander() { store = new Object[INITIA
public class ArrayExpander
{
private int size;
private int noOfItems;
private Object[] store;
private final int INITIALSIZE = 2;
public ArrayExpander()
{
store = new Object[INITIALSIZE];
noOfItems = 0;
size = INITIALSIZE;
}
public void add(Object obj)
{
growBufferIfNecessary();
store[size++] = obj;
/*for (int i = size - 1; i < store.length; i++)
{
store[i] = store[i - 1];
store[i] = obj;
}*/
}
public String toString()
{
String temp = "[" + store[0];
for (int i = 1; i < size; i++)
{
temp = temp + "," + store[i];
}
temp = temp + "]";
return temp;
}
private void growBufferIfNecessary()
{
if (size == store.length)
{
Object[] newStore = new Object[2 * store.length];
for (int i = 0; i < store.length; i++)
{
newStore[i] = store[i];
}
store = newStore;
}
}
public static void main(String[] args)
{
ArrayExpander ae = new ArrayExpander();
//System.out.println(ae);
ae.add("a");
ae.add("b");
System.out.println(ae);
ae.add("c");
ae.add("d");
ae.add("e");
ae.add("f");
ae.add("g");
ae.add("h");
System.out.println(ae);
ae.add("i");
System.out.println(ae);
}
}
我不明白为什么我会得到空语句。第一行应该是a,b,然后arraylist的大小应该是a,b,c,d的两倍。我已将其设置为最终int INITIALSIZE=2。
我正在寻找的输出是
[a,b]
[a,b,c,d]
[a,b,c,d,e,f,g,h]
[a,b,c,d,e,f,g,h,i,null,null,null,null,null,null,null]
此代码将适用于您。大小应该指数组的大小,而noOfItems指数组中的项目数。你把这两个搞混了。我只更改了add()和growBufferIfEssential()中的几项内容
公共类ArrayExpander
{
私有整数大小;
私人国际餐厅;
私有对象[]存储;
私有最终int INITIALSIZE=2;
公共ArrayExpander()
{
存储=新对象[初始大小];
noOfItems=0;
大小=初始大小;
}
公共无效添加(对象obj)
{
如有必要();
存储[noOfItems++]=obj;
}
公共字符串toString()
{
字符串temp=“[”+存储[0];
对于(int i=1;i
试试这个。如果你注意到我用noOfItems替换了几个地方的尺码。您非常接近,您只需要更改几件事情。手动复制带有循环的数组非常痛苦,请使用 我消除了
noOfItems
。您不需要它,您的add
方法只是
public void add(Object obj) {
growBufferIfNecessary();
store[size++] = obj;
}
最后,您的toString()
可以使用
然后我得到了你的预期输出
[a, b]
[a, b, c, d, e, f, g, h]
[a, b, c, d, e, f, g, h, i]
如果有必要的话,你也可以分享你的代码吗!您还需要在此处共享整个代码,我们不知道大小变量是什么。@La comadreja我相信他正在尝试实现
ArrayList
为什么在add中有一个循环?它不应该是简单的growBufferIfEssential();存储[size++]=obj代码>?存储[i]=存储[i-1];存储[i]=obj;这些线。。。一些魔法在后面!我打赌某处有一个size=INITIAL\u size
private int size = 0;
private Object[] store = new Object[INITIALSIZE];
private void growBufferIfNecessary() {
if (size >= store.length) {
Object[] newStore = new Object[2 * store.length];
System.arraycopy(store, 0, newStore, 0, store.length);
store = newStore;
}
}
public void add(Object obj) {
growBufferIfNecessary();
store[size++] = obj;
}
@Override
public String toString() {
return Arrays.toString(Arrays.copyOf(store, size));
}
[a, b]
[a, b, c, d, e, f, g, h]
[a, b, c, d, e, f, g, h, i]