gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:46:26 26 4
gpt4 key购买 nike

所以我在运行的时候出现了空指针异常。我应该创建一个通用类来实现一个列表,其中包含根据需要添加的数组 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com