NullPointerException:初始化变量突然为空

NullPointerException: initialised variable suddenly null

我最近开始使用 Java 编程,现在遇到以下问题:

我写了一个class "ComparePattern",它得出最适合的分数,然后应该返回分数和最适合的模式。目前成绩没问题。不过,回馈模式似乎行不通。它是一个双值数组,比如 "bestpattern"。我已经实现了一个 return 方法来返回所述双数组。

public void double[] getBestPattern(){return bestpattern;}  

现在,在 运行 比较之后,如果我从主 class(比如 MainClass)调用 return 方法,它 return 是一个数组无效的。

double[] test = ComparePattern.getBestPattern();

做类似

的事情
double[] test=ComparePattern.bestpattern;

也给出空值。但是,如果我在生成它的 ComparePattern class 的构造函数中打印 bestpattern,它显然不为空,但包含预期值。现在是有趣的部分。如果我在 ComparePattern 的构造函数中给出以下指令(当然是在生成 bestpattern 之后),它就会工作并返回正确的值:

MainClass.test=bestpattern;

显然这不是我想要的方式。我已经以静态和非静态方式尝试过,我确信所有变量都已正确初始化。任何人都知道为什么 java 将 bestpattern 从正常运行的双数组更改为 null?

你的问题可能出在ComparePattern的构造函数中。它可能看起来像这样:

public class ComparePattern    
{
    private double[] bestpattern;
    ...
    public ComparePattern ()
    {
        ...
        double[] bestpattern = new double[..];
        ...
    }
    ...
}

这意味着您的构造初始化了一个名为 bestpattern 的本地数组,而不是具有相同名称的成员数组。您只需将其更改为 :

public class ComparePattern    
{
    private double[] bestpattern;
    ...
    public ComparePattern ()
    {
        ...
        bestpattern = new double[..];
        ...
    }
    ...
}

这可以解释为什么您的 getBestPattern() 方法 returns 为空。