Java ArrayList Java.lang.NullPointerException
很抱歉,我对编程非常陌生,遇到了我希望能解决的简单问题。 我将把我的代码放在这里,并在下面解释我试图做什么Java ArrayList Java.lang.NullPointerException,java,arraylist,static,nullpointerexception,Java,Arraylist,Static,Nullpointerexception,很抱歉,我对编程非常陌生,遇到了我希望能解决的简单问题。 我将把我的代码放在这里,并在下面解释我试图做什么 public class main { static ArrayList<Interpreter> ints1; static ArrayList<Customer> custs1; static MainFunctions mainF; static { //Static blocks execute first - and are great for ini
public class main {
static ArrayList<Interpreter> ints1;
static ArrayList<Customer> custs1;
static MainFunctions mainF;
static { //Static blocks execute first - and are great for initializing data!
ArrayListPopulator ALP1 = new ArrayListPopulator();
ints1 = ALP1.populateALints1(); // error occurs on this method call.
custs1 = ALP1.populateALcusts1();
mainF = new MainFunctions(ints1, custs1);
}
public static void main(String[] args) {
mainF.findNearestInterp("Frank");
}
公共类主{
静态数组列表ints1;
静态数组列表custs1;
静态维护功能维护;
静态{//静态块首先执行-这对于初始化数据非常有用!
ArrayListPopulator ALP1=新的ArrayListPopulator();
ints1=ALP1.populateALints1();//此方法调用发生错误。
custs1=ALP1.populateALcusts1();
mainF=新的main函数(ints1、custs1);
}
公共静态void main(字符串[]args){
mainF.findNearestInterp(“弗兰克”);
}
}
ArrayList填充器:
import java.util.ArrayList;
public class ArrayListPopulator {
private ArrayList<Interpreter> ints1ToGo;
private ArrayList<Customer> custs1ToGo;
public ArrayList<Interpreter> populateALints1() {
//Format is "String pName, int pAge, String PGender,
// int pSignLevel, boolean pDeafBlindExp, double pLatitude, double pLongitude, String pTown"
//Gender must be "Male"||"Female"
//In future this could be done by scanning a local config text file. Wish that I knew that stuff :l
Interpreter Elliott = new Interpreter("Elliott", 23, "Male", 6, true, 52.098049, 0.277860, "Linton");
ints1ToGo.add(Elliott); //error occurs here.
Interpreter Sarah = new Interpreter("Sarah", 20, "Female", 3, true, 52.209950, 0.137774, "Cambridge");
ints1ToGo.add(Sarah);
Interpreter Argibarge = new Interpreter("Argibarge", 42, "Male", 3, false, 52.599199, -0.264226, "Peterborough");
ints1ToGo.add(Argibarge);
Interpreter Bruce = new Interpreter("Bruce", 30, "Male", 2, false, 50.717527, -3.540192, "Exeter");
ints1ToGo.add(Bruce);
Interpreter Medusa = new Interpreter("Medusa", 1009, "Female", 4, false, 55.867795, -4.267566, "Glasgow");
ints1ToGo.add(Medusa);
return ints1ToGo;
}
public ArrayList<Customer> populateALcusts1() {
//Format is "String pName, int pAge, String PGender,
//boolean pDeafBlind, double pLatitude, double pLongitude, String pTown"
//Gender must be "Male"||"Female"
//In future this could be done by scanning a local config text file. Wish that I knew that stuff :l
Customer Frank = new Customer("Frank", 30, "Male", false, 56.113482, -3.934635, "Stirling");
custs1ToGo.add(Frank);
Customer Eleanor = new Customer("Eleanor", 23, "Female", true, 52.622439, 1.281124, "Norwich");
custs1ToGo.add(Eleanor);
Customer Pacha = new Customer("Pacha", 43, "Male", false, 52.397273, -0.727392, "Kettering");
custs1ToGo.add(Pacha);
Customer Roy = new Customer("Roy", 69, "Male", false, 51.746940, -1.257345, "Oxford");
custs1ToGo.add(Roy);
Customer Jenette = new Customer("Jenette", 16, "Male", false, 51.871877, 0.357845, "Great Dunmow");
custs1ToGo.add(Jenette);
return custs1ToGo;
}
import java.util.ArrayList;
公共类arraylistopulator{
私人ArrayList ints1ToGo;
私人ArrayList custs1ToGo;
公共阵列列表populateALints1(){
//格式为“字符串pName,int pAge,字符串PGender,
//int pSignLevel,布尔值pDeafBlindExp,双陈词滥调,双pLongitude,字符串pTown“
//性别必须是“男性”| |“女性”
//将来,这可以通过扫描本地配置文本文件来实现
口译员Elliott=新口译员(“Elliott”,23,“男性”,6,对,52.098049,0.277860,“林顿”);
ints1ToGo.add(Elliott);//此处发生错误。
口译员莎拉=新口译员(“莎拉”,20,“女性”,3,对,52.209950,0.137774,“剑桥”);
ints1ToGo.add(莎拉);
解释器Argibarge=新解释器(“Argibarge”,42,“男性”,3,假,52.599199,-0.264226,“彼得伯勒”);
ints1ToGo.add(Argibarge);
口译员Bruce=新口译员(“Bruce”,30,“男”,2,假,50.717527,-3.540192,“埃克塞特”);
ints1ToGo.add(布鲁斯);
口译员美杜莎=新口译员(“美杜莎”,1009,“女性”,4,假,55.867795,-4.267566,“格拉斯哥”);
ints1ToGo.add(美杜莎);
返回多哥;
}
公共阵列列表populateALcusts1(){
//格式为“字符串pName,int pAge,字符串PGender,
//布尔pDeafBlind,双陈词滥调,双pLongitude,字符串pTown“
//性别必须是“男性”| |“女性”
//将来,这可以通过扫描本地配置文本文件来实现
客户弗兰克=新客户(“弗兰克”,30,“男性”,假,56.113482,-3.934635,“斯特林”);
加上(弗兰克);
客户埃莉诺=新客户(“埃莉诺”,23,“女性”,真实,52.622439,1.281124,“诺维奇”);
加上(埃莉诺);
客户Pacha=新客户(“Pacha”,43,“男性”,假,52.397273,-0.727392,“凯特林”);
加上(帕查);
客户罗伊=新客户(“罗伊”,69,“男性”,假,51.746940,-1.257345,“牛津”);
加上(罗伊);
客户Jenette=新客户(“Jenette”,16,“男性”,假,51.871877,0.357845,“大邓莫”);
加上(杰内特);
返回多哥;
}
}
运行时的错误消息:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
at ArrayListPopulator.populateALints1(ArrayListPopulator.java:16)
at main.<clinit>(main.java:23)
线程“main”java.lang.ExceptionInInitializeError中的异常
原因:java.lang.NullPointerException
位于arraylistopulator.populateALints1(arraylistopulator.java:16)
在main(main.java:23)
在这段代码中,我最不熟悉的是静态{}块,它从存储在ArrayListPopulator类中的数据初始化我的主要ArrayList数据。看起来我没有正确初始化ArrayList,或者正确添加元素,或者没有正确分配引用变量
非常感谢你的帮助 未初始化
ints1ToGo
列表
或者在构造函数中执行此操作:
public ArrayListPopulator() {
ints1ToGo = new ArrayList<Interpreter>();
}
public arraylistopulator(){
ints1ToGo=newarraylist();
}
或者在尝试添加元素之前
ints1ToGo = new ArrayList<Interpreter>();
Interpreter Elliott = new Interpreter("Elliott", 23, "Male", 6, true, 52.098049, 0.277860, "Linton");
ints1ToGo.add(Elliott); //error won't occur here anymore.
ints1ToGo=newarraylist();
口译员Elliott=新口译员(“Elliott”,23,“男性”,6,对,52.098049,0.277860,“林顿”);
ints1ToGo.add(Elliott)//这里不再发生错误。
请注意,您必须对
custs1ToGo
列表执行相同的操作,因为(正如我所看到的)您没有在任何地方初始化它,而是在populateALcusts1
方法中使用它。未初始化ints1ToGo
列表
或者在构造函数中执行此操作:
public ArrayListPopulator() {
ints1ToGo = new ArrayList<Interpreter>();
}
public arraylistopulator(){
ints1ToGo=newarraylist();
}
或者在尝试添加元素之前
ints1ToGo = new ArrayList<Interpreter>();
Interpreter Elliott = new Interpreter("Elliott", 23, "Male", 6, true, 52.098049, 0.277860, "Linton");
ints1ToGo.add(Elliott); //error won't occur here anymore.
ints1ToGo=newarraylist();
口译员Elliott=新口译员(“Elliott”,23,“男性”,6,对,52.098049,0.277860,“林顿”);
ints1ToGo.add(Elliott)//这里不再发生错误。
注意您必须对
custs1ToGo
列表执行同样的操作,因为(如我所见)您没有在任何地方初始化它,并且它在populateALcusts1
方法中使用。您从未初始化ints1ToGo
:
ints1ToGo = new ArrayList<Interpreter>();
ints1ToGo=newarraylist();
您从未初始化ints1ToGo
:
ints1ToGo = new ArrayList<Interpreter>();
ints1ToGo=newarraylist();
ints1ToGo
从未初始化。更改私有数组列表ints1ToGo
toprivate ArrayList ints1ToGo=new ArrayList()代码>ints1ToGo
从未初始化。更改私有数组列表ints1ToGo
toprivate ArrayList ints1ToGo=new ArrayList()代码>您需要初始化两个阵列实例
private ArrayList<Interpreter> ints1ToGo = new ArrayList<Interperter>();
private ArrayList<Customer> custs1ToGo = new ArrayList<Customer>();
private ArrayList ints1ToGo=new ArrayList();
private ArrayList custs1ToGo=new ArrayList();
您需要初始化两个阵列实例
private ArrayList<Interpreter> ints1ToGo = new ArrayList<Interperter>();
private ArrayList<Customer> custs1ToGo = new ArrayList<Customer>();
private ArrayList ints1ToGo=new ArrayList();
private ArrayList custs1ToGo=new ArrayList();
第16行指的是什么?您是否在任何地方初始化ArrayList集合?“静态块首先执行-非常适合初始化数据”,并且非常适合在单元测试、模拟、控制模块之间的初始化顺序等方面造成困难。请小心使用。我更喜欢用缩写的形式