java - 我的数组中出现空值

标签 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[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);
   }
}

这是我的输出:

[null,null]
[null,null,a,b]
[null,null,a,b,c,d,e,f,g,h]
[null,null,a,b,c,d,e,f,g,h,i]

我不明白为什么我会收到空​​语句。第一行应该是a,b,然后数组列表的大小应该加倍,并且是a,b,c,d。我将其设置为 Final 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]

最佳答案

此代码适合您。 size 应该指的是数组的大小,而 noOfItems 指的是数组中的项目数。你有点把两者混为一谈了。我只改变了 add() 和 GrowthBufferIfNecessary() 中的一些内容。

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[noOfItems++] = 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 (noOfItems == size)
      {
         size = 2 * size;
         Object[] newStore = new Object[size];
         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);
   }
}

试试这个。如果您注意到我用 noOfItems 替换了几个位置的 size。你真的很接近,只需要改变一些事情。

关于java - 我的数组中出现空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26472274/

相关文章:

java - 请给出这个java程序总是出现在else部分的原因

java - 共享单例实例

java - 无法验证 XML

c++ - 如何在数组 <bool> 上使用位操作

java - Arrays.stream().map().sum() 的不稳定性能

java - 如何更改 Dropwizard 的验证错误行为?

C++ 不需要返回值

java - 对数组进行排序的递归函数

c - 函数定义中的指针与数组 : what is the difference between void fct1(int *p) and void fct1(int p[])?

ios - 如何在 UITableView 中显示数组中的 x 个对象,然后在向下滚动时显示更多对象?