所以我在运行的时候出现了空指针异常。我应该创建一个通用类来实现一个列表,其中包含根据需要添加的数组 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> head
和chunk<T> tail
在构造函数中。代码应该只是head = null;
没有chunk<T>
.在
chunk
的构造函数中你再次用ArrayList<T> chunk_ = ...
做同样的事情.
我可以说更多的事情;但是,我认为您应该首先解决这些问题。
关于java - 第一个元素的空指针异常添加到我的通用 block 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9754376/