java - 第一个元素的空指针异常添加到我的通用 block 列表

标签 java

所以我在运行的时候出现了空指针异常。我应该创建一个通用类来实现一个列表,其中包含根据需要添加的数组 block 。每次我添加一个元素都是检查尾 block 数组中是否有空间,如果有则添加元素。否则它需要添加一个 block ,调整指针并添加元素。到目前为止,我的问题是,当我去添加第一个元素时,它抛出了一个空指针异常。我相信我已经实例化和对象并在需要的地方分配它。如果有人有任何见解,请随时让我知道我做错了什么,或者它就在我面前。

"myChunk.chunk_.add(element);////////////error"是我收到错误的地方。

package ChunkList;


import java.util.*;
import java.io.*;

public class chunkList<T> {

    public static void main(String[] args) {

        chunkList<Integer> myList=new chunkList<Integer>();

        for(int i=1; i<24; i++)
        {
            myList.add(i);//////////////////////////////////
            System.out.println("Adding number: "+ i);
        }
        System.out.println("");

        myList.display();


    }


    private chunk head;//changed T to chunk
    private chunk tail;//changed T to chunk
    private int array_size=8;
    private int list_size;

    public chunkList()//Default Constructor
    {
        head=null;
        tail=null;
        list_size=0;
    }

    //public chunkList(chunkList copy){}// a copy constructor.... don't think I need.

    class chunk//  added <T>
    {
        //T[] chunk_arr  = new T[array_size];// illegal operation
        //ArrayList<T> chunk_ = new ArrayList<T>(array_size);
        ArrayList<T> chunk_; 

        private int chunk_size; //may need to change to public
        chunk nextChunk;//changed T to chunk
        chunk prevChunk;//changed T to chunk

        public chunk()//default constructor
        {
            chunk_ = new ArrayList<T>(array_size);
            chunk_size=0;
            nextChunk=null;
            prevChunk=null;
        }
    }

    public void add(T element)
    {
        if(this.tail==null)//empty chunk list
        {
            chunk myChunk=new chunk();//instantiate

            //myChunk.prevChunk=null;//changed from head to null
            //myChunk.nextChunk=null;//changed from tail to null
            head=myChunk;
            tail=myChunk;
            //head.nextChunk=null;
            //head.prevChunk=null;

            myChunk.chunk_.add(element);////////////error
            list_size++;
            myChunk.chunk_size=1;
        }
        else if (this.tail.chunk_size<array_size)//adds the element to the last chunk in list
        {
            this.tail.chunk_.add(element);//add element

            list_size++;
            this.tail.chunk_size++;//increase individual chunk array size
        }
        else// create new chunk, relink chunks, add element
        {
                        chunk myChunk=new chunk();

        myChunk.chunk_size=1;   
        list_size++;
        myChunk.chunk_.add(element);

        tail.nextChunk=myChunk;
        myChunk.prevChunk=tail;
        tail=myChunk;
        }}

     public int size()
         {return list_size;}

     public void display()
     {
         chunk my_chunk=head;

         if(my_chunk==null)
         {
             System.out.print("Empty Chunk List");
             return;
         }

         for(int i=0;i<list_size;  )
         {
             for(int j=0; j<my_chunk.chunk_size;  j++)
             {
                 System.out.println(my_chunk.chunk_.get(j));
                 i++;
             }
             if(my_chunk.nextChunk!=null)
             my_chunk=my_chunk.nextChunk;
         }
     }


}

非常感谢 Olivier Jacot-Descombes,我修复了代码的一个问题,它现在添加了第一个 block ,但是当它尝试创建下一个 block 时抛出 NPE。如果我需要更多帮助,我会查看并回来。谢谢大家。

附言this 的 add 方法在最后一个 else 语句中错误地链接在一起。

最佳答案

你的代码很奇怪

  • 有一个 public static void main(String[] args)类内chunkList<T> .这没有意义。

  • 您声明一个 chunkList<Integer>而不是 chunkList<int> .

  • 您重新声明一个 chunk<T> headchunk<T> tail在构造函数中。代码应该只是 head = null;没有chunk<T> .

  • chunk 的构造函数中你再次用 ArrayList<T> chunk_ = ... 做同样的事情.

我可以说更多的事情;但是,我认为您应该首先解决这些问题。

关于java - 第一个元素的空指针异常添加到我的通用 block 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9754376/

相关文章:

java - 基于多个标志的条件

java - 多线程程序的处理器数量

java - 哪个更贵 : using variables or using for loop instead of declaring variables to hold temp results?

java - 使用 java 中的\i 命令在 postgres 中导入 .sql 文件

java - 没有日期的排序时间

java - 我应该使用什么事件来检测自定义 JComponent 中父 JFrame 的关闭?

Java 不断返回错误的答案

java - 如何在Android中为CustomView的Text设置字体?

java - 从 Illustrator 到 Java 获取多边形的最简单方法?

java - 在 Android studio 中使用 Jcenter 和 gradle