我在addpointload()方法中得到一个空指针异常

wvt8vs2t  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(346)

我试图通过这个方法访问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;
    }
}

任何帮助都将不胜感激。

ltqd579y

ltqd579y1#

啊哈!你的 loadModel 中的引用似乎为空 Beam 班级。你需要在 Beam's 建造师。

hc2pp10m

hc2pp10m2#

你宣布一个成员像

private LoadModel loadModel;

然后你试着调用它的方法

loadModel.addPL(PL)

由于nullpointerexception而失败,因为您不能调用不存在的方法。所以,要解决实际问题,需要初始化 loadModel 通过调用 LoadModel .
您可以立即知道数组大小是否是实际问题,因为尝试引用边界之外的数组元素将引发arrayindexoutofboundsexception,而不是 NullPointerException .
在你现在解决了你的npe问题之后,你可能会遇到其他的问题,但是当它们真正开始引起问题的时候,让我们来担心它们。您可以“调整”一个数组的大小,方法是创建一个具有相同类型的所需大小的新数组,初始化它的元素(通过复制源的元素),然后将新数组指定为数组变量的新值。

4sup72z8

4sup72z83#

添加到此行:
loadmodel=新的loadmodel(null,null);

相关问题