我尝试打印Car数组中的所有元素。但是控制台显示它有空指针问题。
假设我有一个名为Car的类,并且Car类没有任何错误。CarLeadership类操作一组汽车对象。我将它们放在一个名为carArr的数组中( CarLeadership类中的一个属性)。
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);
}
}
错误消息:
Exception in thread "main" java.lang.NullPointerException
at CarLeadership.setCarArrElements(CarLeadership.java:31)
at CarLeadershipDriver.main(CarLeadershipDriver.java:7)
发布于 2019-07-17 01:27:39
更改构造函数
public CarLeadership(int maxCar) {
Car[] carArr = new Car[maxCar];
position = 0;
}
至
public CarLeadership(int maxCar) {
carArr = new Car[maxCar];
position = 0;
}
就这样。
现在,您的程序运行并输出:
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
发布于 2019-07-17 01:29:28
问题是您正在构造函数中初始化carArr的本地副本。
替换
//pass length of array
public CarLeadership(int maxCar) {
Car[] carArr = new Car[maxCar];
position=0;
}
使用
//pass length of array
public CarLeadership(int maxCar) {
carArr = new Car[maxCar];
position=0;
}
或者如果你想说得更清楚些
//pass length of array
public CarLeadership(int maxCar) {
this.carArr = new Car[maxCar];
position=0;
}
发布于 2019-07-17 01:27:49
您在构造函数中创建了新数组,而您应该将声明的大小分配给现有数组。
this.carArr =新的CarmaxCar;
https://stackoverflow.com/questions/57062503
复制相似问题