我曾尝试在我的班级中使用ArrayList,但我得到了Nullpointerexception,我真的不知道为什么,这是我的班级:
......
RawVector vector2;
**ArrayList<Long> vectorTime;**
public RawVector CreatingArray(){
try {
ArrayList<Float> x = new ArrayList<Float>();
ArrayList<Float> y = new ArrayList<Float>();
ArrayList<Float> z = new ArrayList<Float>();
**ArrayList<Long> tm = new ArrayList<Long>();**
File n = new File("file.csv");
FileReader fileReader = new FileReader(n);
BufferedReader reader = new BufferedReader(fileReader);
for(String zeile = reader.readLine(); zeile != null; zeile = reader.readLine()){
StringTokenizer data = new StringTokenizer(zeile, " ,");
**tm.add(Long.parseLong(data.nextToken()));**
x.add(Float.parseFloat(data.nextToken()));
y.add(Float.parseFloat(data.nextToken()));
z.add(Float.parseFloat(data.nextToken()));
size++;
}
vector2 = new RawVector();
vector2.setX(x);
vector2.setY(y);
vector2.setZ(z);
vector2.setSize(size);
vector2.setTime(tm);
reader.close();
**this.vectorTime = tm;**
}catch (IOException e) {
e.printStackTrace();
}
return vector2;
}
public ArrayList<Long> zeitstempel(){
return this.vectorTime;
}
public long getWsize(){
long wsize;
ArrayList<Long> timestamp;
**timestamp = vectorTime;**
**long SumSamp1 = timestamp.get(0);**
long SumSamp2 = timestamp.get(vectorTime.size());
long timespan = SumSamp2 -= SumSamp1;
long timespanInSec = TimeUnit.MILLISECONDS.toSeconds(timespan);
wsize = Zeitfenster*vectorTime.size()/timespanInSec;
return wsize;
}
.....
我在方法ArrayList<Long> tm
中创建了CreatingArray()
,并通过vectorTime
将其分配给实例变量this.vectorTime = tm
。接下来,我在方法getWize()
中使用了此实例变量并将其分配给ArrayList<Long> timestamp
,但是一旦编译此代码,您将在代码行long SumSamp1 = timestamp.get(0)
中获得NullPointerException。
问题是什么?我非常确定实例变量vectorTime
是由this.vectorTime = tm
初始化的。但根据例外情况,它并不是我不知道为什么?!
可能我混淆了分配和初始化......
我是Java的新手,因此我认为这种错误通常适用于像我这样的初学者。不过,我希望你们中的任何人都可以提供帮助,并且可以给我一些有用的提示来解决这个问题。
提前感谢您的帮助!!!
最诚挚的问候!
答案 0 :(得分:0)
首先你确定在getWsize()之前调用CreatingArray()吗?
然后尝试仅使用全局变量vectorTime,而不使用局部变量tm和timestamp。只是为了确保它有效。
//declaring global variable
ArrayList<Long> vectorTime; //before
ArrayList<Long> vectorTime = new ArrayList<Long>(); //after
//inside CreatingArray()
ArrayList<Long> tm = new ArrayList<Long>(); //before
vectorTime.clear(); //after
//inside getWsize
long SumSamp1 = timestamp.get(0); //before
long SumSamp1 = vectorTime.get(0);//after
找到错误后,可以放回那些局部变量。