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 为空。
我最近开始使用 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 为空。