【问题标题】:NullPointerException: initialised variable suddenly nullNullPointerException:初始化变量突然为空
【发布时间】:2015-07-08 14:45:00
【问题描述】:

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

我写了一个“ComparePattern”类,它得出最佳拟合的分数,然后应该返回分数和最佳拟合模式。目前成绩没有问题。归还模式似乎不起作用。它是一个双值数组,比如“bestpattern”。我已经实现了一个返回方法来返回所说的双数组。

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

现在,在运行比较之后,如果我从我的主类(比如 MainClass)调用返回方法,它会返回一个为空的数组。

double[] test = ComparePattern.getBestPattern();

做类似的事情

double[] test=ComparePattern.bestpattern;

也给出 null 。但是,如果我在生成它的 ComparePattern 类的 counstructor 中打印 bestpattern ,它显然不是 null 而是保持预期值。现在是有趣的部分。如果我在 ComparePattern 的构造函数中给出以下指令(当然是在生成最佳模式之后),它会起作用并返回正确的值:

MainClass.test=bestpattern;

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

【问题讨论】:

  • 您能否提供一个 SSCCE(简短、自包含、正确的示例)来说明问题?
  • 请提供您的构造函数,最好提供您的类代码。我会冒险猜测您的 bestpattern 字段仅适用于您的构造函数,而不适用于类本身。你在哪里定义bestpattern
  • 你忘记了this(比如this.bestpattern = bestpattern)吗?
  • 将 getBestPattern() 方法设为静态方法。

标签: java arrays nullpointerexception null


【解决方案1】:

您的问题可能出在 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() 方法返回 null。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多