我试图通过这个方法访问2个对象类,但是它给出了一个空指针异常。不知道是数组大小还是更复杂。有人建议我按以下方式增加数组大小(大小x1.5),但我不知道如何才能做到这一点。
下面是类梁:
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类如下:
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类:
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;
}
}
任何帮助都将不胜感激。
3条答案
按热度按时间ltqd579y1#
啊哈!你的
loadModel
中的引用似乎为空Beam
班级。你需要在Beam's
建造师。hc2pp10m2#
你宣布一个成员像
然后你试着调用它的方法
由于nullpointerexception而失败,因为您不能调用不存在的方法。所以,要解决实际问题,需要初始化
loadModel
通过调用LoadModel
.您可以立即知道数组大小是否是实际问题,因为尝试引用边界之外的数组元素将引发arrayindexoutofboundsexception,而不是
NullPointerException
.在你现在解决了你的npe问题之后,你可能会遇到其他的问题,但是当它们真正开始引起问题的时候,让我们来担心它们。您可以“调整”一个数组的大小,方法是创建一个具有相同类型的所需大小的新数组,初始化它的元素(通过复制源的元素),然后将新数组指定为数组变量的新值。
4sup72z83#
添加到此行:
loadmodel=新的loadmodel(null,null);