首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回NullPointerException的Java数组

返回NullPointerException的Java数组
EN

Stack Overflow用户
提问于 2019-07-17 01:21:00
回答 3查看 100关注 0票数 0

我尝试打印Car数组中的所有元素。但是控制台显示它有空指针问题。

假设我有一个名为Car的类,并且Car类没有任何错误。CarLeadership类操作一组汽车对象。我将它们放在一个名为carArr的数组中( CarLeadership类中的一个属性)。

代码语言:javascript
复制
public class CarLeadership {
private Car[] carArr;
private int position; //point to the current element of carDatabase

//pass length of array
public CarLeadership(int maxCar) {  
    Car[] carArr = new Car[maxCar];
    position=0;                                                   
}

//parameterized constructor
public CarLeadership(Car[] carDatabase,int position) {
    carArr = carDatabase;
    this.position = position;
}

//copy constructor
public CarLeadership(CarLeadership c) {
    this.carArr = c.getCarArr();
    this.position = c.position;
} 

public void setCarArr(Car[] carArr) {
    this.carArr = carArr;
}

public void setCarArrElements(int index,Car carObj) {
    if(index >= carArr.length) {
        System.out.println("Index out of bounds");
        System.exit(0);
    }
    carArr[index] = carObj;
}

public Car[] getCarArr() {
    //deep copy
    Car[] anotherCarArr = new Car[this.carArr.length];
    for(int i=0; i<anotherCarArr.length;i++)
        anotherCarArr[i] = this.carArr[i];
    return anotherCarArr;
}

public void setPosition(int position) {
    this.position = position;
}

public int getPosition() {
    return position;
}

public String toString() { //instance has carArr
    String s="";
    for(int i=0;i<carArr.length;i++) 
        if(carArr[i]!= null) 
            s += ("Car: # "+ i + "\nMake: " +this.carArr[i].getMake()
                    +"\nModel: "+this.carArr[i].getModel()
                    +"\nYear: "+this.carArr[i].getYear()
                    +"\nPrice: "+this.carArr[i].getPrice()+"\n");
    return s;
}
}

//driver class
public class CarLeadershipDriver {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    CarLeadership cc = new CarLeadership(5);
    cc.setCarArrElements(0,new Car("aa","cc",2018,242));
    cc.setCarArrElements(1,new Car("aa","aa",2018,242));
    cc.setCarArrElements(2,new Car("aa","cc",2018,242));    
    System.out.println(cc);
}
}

错误消息:

代码语言:javascript
复制
 Exception in thread "main" java.lang.NullPointerException
    at CarLeadership.setCarArrElements(CarLeadership.java:31)
    at CarLeadershipDriver.main(CarLeadershipDriver.java:7)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-17 01:27:39

更改构造函数

代码语言:javascript
复制
public CarLeadership(int maxCar) {
    Car[] carArr = new Car[maxCar];
    position = 0;
}

代码语言:javascript
复制
public CarLeadership(int maxCar) {
    carArr = new Car[maxCar];
    position = 0;
}

就这样。

现在,您的程序运行并输出:

代码语言:javascript
复制
Car: # 0
Make: aa
Model: cc
Year: 2018
Price: 242
Car: # 1
Make: aa
Model: aa
Year: 2018
Price: 242
Car: # 2
Make: aa
Model: cc
Year: 2018
Price: 242
票数 1
EN

Stack Overflow用户

发布于 2019-07-17 01:29:28

问题是您正在构造函数中初始化carArr的本地副本。

替换

代码语言:javascript
复制
//pass length of array
public CarLeadership(int maxCar) {  
    Car[] carArr = new Car[maxCar];
    position=0;                                                   
}

使用

代码语言:javascript
复制
//pass length of array
public CarLeadership(int maxCar) {  
    carArr = new Car[maxCar];
    position=0;                                                   
}

或者如果你想说得更清楚些

代码语言:javascript
复制
//pass length of array
public CarLeadership(int maxCar) {  
    this.carArr = new Car[maxCar];
    position=0;                                                   
}
票数 1
EN

Stack Overflow用户

发布于 2019-07-17 01:27:49

您在构造函数中创建了新数组,而您应该将声明的大小分配给现有数组。

this.carArr =新的CarmaxCar;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57062503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档