我正在尝试构建一个对象数组,但在尝试设置它们时会得到一个nullpointer异常。
为什么当它到达第一辆车[i]时,它会抛出异常?
这是代码: 示例1:http://pastebin.com/4h4W3770 示例2:http://pastebin.com/4GL4FhrW
答案 0 :(得分:2)
创建数组对象时,其所有元素都初始化为null
(如果数组包含java.lang.Object
的子类)。您需要在访问任何属性之前实例化每个元素。您正尝试设置Cars
属性而不在下面的代码中实例化NullPointerException
:
car[i].setPlate(info[0]);
在执行此操作之前,您需要像这样初始化Car实例:
public static void main(String[] args) {
String sCurrentLine;
try (BufferedReader br = new BufferedReader(new FileReader("cars.txt"))) {
while ((sCurrentLine = br.readLine()) != null) {
String[] info = sCurrentLine.split(",");
for (int i = 0; i < 10; i++) {
car[i] = new Cars(); //instantiate Cars object or next statement will throw NPE
car[i].setPlate(info[0]);
car[i].setLocation(Integer.parseInt(info[1]));
car[i].setSpeed(Integer.parseInt(info[2]));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
你的setter方法没有得到任何输入/参数,因此他们不知道应该设置什么:
public void setSpeed() {
this.speed = speed;
}
更改为:
public void setSpeed(Integer speed) {
this.speed = speed;
}
答案 2 :(得分:0)
你有一个简单的问题。你从未初始化car[i]
。 car[i]
为null
,当您尝试对null
变量进行任何操作时,您会获得NullPointerException
。
所以解决方案是初始化car[i]
如下所示:
for (int i = 0; i < 10; i++) {
car[i] = new Cars(); //intialise the car.
car[i].setPlate(info[0]);
car[i].setLocation(Integer.parseInt(info[1]));
car[i].setSpeed(Integer.parseInt(info[2]));
}
我认为这将解决您的问题。