我在 addPointLoad() 方法中遇到空指针异常
I'm getting a null pointer exception in addPointLoad() method
我有 2 个对象 class 试图通过此方法访问,但它给出了空指针异常。不知道它是否只是数组大小或更复杂的东西。有人建议我按照以下方式增加数组大小(大小 x 1.5),但我不知道该怎么做。
下面是class梁:
public abstract class Beam {
private String name;
protected double length; // [m]
protected double Emod; // [MPa]
protected double Ixx; // [m^4]
private LoadModel loadModel;
public Beam(String name, double length, double Emod, double Ixx) {
this.name = name;
this.length = length;
this.Emod = Emod;
this.Ixx = Ixx;
}
public void addPointLoad(double magnitude, double loadPos) {
PointLoad PL = new PointLoad(magnitude, loadPos);
loadModel.addPL(PL);
}
LoadModel class 如下:
public class LoadModel {
private PointLoad[] pointLoads;
private LineLoad[] lineLoads;
public int plCounter;
public int llCounter;
public LoadModel(PointLoad[] pl, LineLoad[] ll) {
pointLoads = new PointLoad[2];
lineLoads = new LineLoad[2];
plCounter = 0;
llCounter = 0;
}
public void addPL(PointLoad pl) {
if (plCounter < pointLoads.length) {
pointLoads[plCounter] = pl;
plCounter++;
} else {
plCounter++;
pointLoads[plCounter] = pl;
plCounter++;
}
System.out.println("The amount of Point Loads have been increased");
}
public int numPL() { //Added this aswell as I want to keep track of the number of point loads
return plCounter;
}
下面是 PointLoad class:
public class PointLoad {
private double magnitude;
private double loadPos;
public PointLoad(double magnitude, double loadPos) {
this.magnitude = magnitude;
this.loadPos = loadPos;
}
public double getMag() {
return magnitude;
}
public double getLoadPos() {
return loadPos;
}
}
任何帮助将不胜感激。
嗯!您的 loadModel
引用在 Beam
class 中似乎为空。您需要在 Beam's
构造函数中对其进行初始化。
将此行添加到 Beam 构造函数:
loadModel = new LoadModel(null, null);
你声明一个成员喜欢
private LoadModel loadModel;
然后你尝试像
那样调用它的方法
loadModel.addPL(PL)
因 NullPointerException 而失败,因为您无法调用不存在的方法。因此,要解决您的实际问题,您需要通过调用 LoadModel
.
的构造函数来初始化 loadModel
您可以立即知道数组大小是否是实际问题,因为尝试在边界之外引用数组元素会抛出 ArrayIndexOutOfBoundsException,而不是 NullPointerException
。
现在解决 NPE 问题后,您可能会遇到其他问题,但当它们真正开始引起问题时,让我们担心它们。您可以通过创建相同类型的所需大小的新数组来“调整”数组的大小,按照您的意愿初始化其元素(通过复制源的元素),然后将新数组分配为数组变量的新值.
我有 2 个对象 class 试图通过此方法访问,但它给出了空指针异常。不知道它是否只是数组大小或更复杂的东西。有人建议我按照以下方式增加数组大小(大小 x 1.5),但我不知道该怎么做。
下面是class梁:
public abstract class Beam {
private String name;
protected double length; // [m]
protected double Emod; // [MPa]
protected double Ixx; // [m^4]
private LoadModel loadModel;
public Beam(String name, double length, double Emod, double Ixx) {
this.name = name;
this.length = length;
this.Emod = Emod;
this.Ixx = Ixx;
}
public void addPointLoad(double magnitude, double loadPos) {
PointLoad PL = new PointLoad(magnitude, loadPos);
loadModel.addPL(PL);
}
LoadModel class 如下:
public class LoadModel {
private PointLoad[] pointLoads;
private LineLoad[] lineLoads;
public int plCounter;
public int llCounter;
public LoadModel(PointLoad[] pl, LineLoad[] ll) {
pointLoads = new PointLoad[2];
lineLoads = new LineLoad[2];
plCounter = 0;
llCounter = 0;
}
public void addPL(PointLoad pl) {
if (plCounter < pointLoads.length) {
pointLoads[plCounter] = pl;
plCounter++;
} else {
plCounter++;
pointLoads[plCounter] = pl;
plCounter++;
}
System.out.println("The amount of Point Loads have been increased");
}
public int numPL() { //Added this aswell as I want to keep track of the number of point loads
return plCounter;
}
下面是 PointLoad class:
public class PointLoad {
private double magnitude;
private double loadPos;
public PointLoad(double magnitude, double loadPos) {
this.magnitude = magnitude;
this.loadPos = loadPos;
}
public double getMag() {
return magnitude;
}
public double getLoadPos() {
return loadPos;
}
}
任何帮助将不胜感激。
嗯!您的 loadModel
引用在 Beam
class 中似乎为空。您需要在 Beam's
构造函数中对其进行初始化。
将此行添加到 Beam 构造函数:
loadModel = new LoadModel(null, null);
你声明一个成员喜欢
private LoadModel loadModel;
然后你尝试像
那样调用它的方法loadModel.addPL(PL)
因 NullPointerException 而失败,因为您无法调用不存在的方法。因此,要解决您的实际问题,您需要通过调用 LoadModel
.
loadModel
您可以立即知道数组大小是否是实际问题,因为尝试在边界之外引用数组元素会抛出 ArrayIndexOutOfBoundsException,而不是 NullPointerException
。
现在解决 NPE 问题后,您可能会遇到其他问题,但当它们真正开始引起问题时,让我们担心它们。您可以通过创建相同类型的所需大小的新数组来“调整”数组的大小,按照您的意愿初始化其元素(通过复制源的元素),然后将新数组分配为数组变量的新值.